Provided by:
manpages-tr_1.0.2+cvs20040401-1_all 
İSİM
system - bir kabuk komutunu çalıştırır
KULLANIM
#include <stdlib.h>
int system(const char *dizge);
AÇIKLAMA
system() dizge ile belirtilen bir komutu, /bin/sh -c dizge çağrısıyla
çalıştırır ve komutun çalışması bittikten sonra geri döner. Komutun
çalışması esnasında, SIGCHLD engellenir, SIGINT ve SIGOUT göz ardı
edilir.
DÖNÜŞ DEĞERİ
Herhangi bir hatada -1 döner (fork başarısız olmuş gibi), aksi
takdirde komutun dönüş durumu döner. Bu sonuncu dönüş durumu wait(2) de
belirtilen biçimde olur. Bundan dolayı, komutun çıkış kodu
WEXITSTATUS(durum) olacaktır. /bin/sh´ın çalıştırılamadığı durumlarda,
çıkış durumu, exit(127) yapan komutun durumu olacaktır.
Şayet dizge değeri NULL ise ve kabuk uygunsa, system() sıfırsan farklı
bir değer döndürür; uygun değilse sıfır döndürür.
system(), çocuk süreçlerden hiçbirinin bekleme durumunu etkilemez.
UYUMLULUK
ANSI C, POSIX.2, BSD 4.3
NOTLAR
Bahsedildiği gibi; system(), SIGINT ve SIGQUIT sinyalini yoksayar. Bu,
uygulamaların kendi çocuklarının çıkış durumlarını kontrol etmedikleri
takdirde aşağıdaki örnekteki gibi durdurulamaz bir döngüden sürekli
çağrılan uygulamalara sebep olabilir.
while(birşey) {
int donen = system("foo");
if (WIFSIGNALED(donen) &&
(WTERMSIG(donen) == SIGINT || WTERMSIG(donen) == SIGQUIT))
break;
}
Sistem bütünlüğünü bozmak için, bazı çevre değişkenleri tuhaf
değerlerle kullanılabileceğinden, system()´i suid veya sgid yetkileri
olan bir yazılımda kullanmayın. Onun yerine exec(3) ailesine ait
işlevleri kullanın, ama execlp(3) veya execvp(3) işlevleri hariç.
/bin/sh'ın bash'ın 2. sürümü olduğu sistemlerde, bash başlatma
sırasında yetkileri tutacağından system(), suid veya sgid hakları olan
yazılımlardan düzgün çalışmayacaktır. (Debian sh olarak çağrıldığında
bunu yapmayan değiştirilmiş bir bash kullanır.)
/bin/sh'ın kullanılabilirliği aslında kontrol edilmez; Daima
kullanılabilir olduğu varsayılır. ISO C kontrolün yapılmasını isterse
de POSIX.2 kabuktan geri dönen değerin daima sıfırdan farklı olması
gerektiğini kabul eder (çünkü kabuk olmayan bir sistem uyumlu değildir
ve uyum için kabuğun eklenmiş olması gerekmektedir).
Kabuk komutu için 127 döndürmek mümkündür, bu nedenle kod, execve()
çağrısının hata verdiğinin, kesin bir kanıtı sayılamaz.
İLGİLİ BELGELER
sh(1), signal(2), wait(2), exec(3)
ÇEVİREN
Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
23 Eylül 2001 system(3)