İ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