Provided by: manpages-tr_1.0.2+cvs20040401-1_all bug

İ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)