Provided by: manpages-tr_1.0.5.1-2_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)