Provided by: manpages-tr_2.0.6-2_all bug

İSİM

       system - kabuk komutu çalıştırır

BİLDİRİM

       #include <stdlib.h>

       int system (const char *command);

AÇIKLAMA

       system() kütüphane işlevi, aşağıdaki gibi exec(3) kullanarak belirtilen kabuk komutunu
       yürüten bir alt süreç oluşturmak için fork(2) çağrısını kullanır:

           execl("/bin/sh", "sh", "-c", komut, (char *) NULL);

       Komut tamamlanınca system() işlevi döner.

       Komutun yürütülmesi sırasında system() çağrısının yapıldığı süreçte SIGCHLD engellenir,
       SIGINT ve SIGQUIT yok sayılır. (Bu sinyaller, komutu yürüten alt süreç içindeki
       öntanımlılarına göre işlenir.)

       command NULL ise system(), sistemde bir kabuğun mevcut olup olmadığını gösteren bir durum
       döndürür.

DÖNÜŞ DEĞERİ

       system() işlevinin dönüş değeri şunlardan biridir:

        •  command NULL ise, kullanılabilir bir kabuk varsa sıfırdan farklı bir değer, yoksa 0
           döner.

        •  Bir alt süreç oluşturulamıyorsa veya durumu alınamıyorsa -1 döner ve hata kodu errno
           değişkenine atanır.

        •  Alt süreçte bir kabuk yürütülemezse, alt kabuk 127 durum koduyla çağrılan _exit(2) ile
           sonlandırılmış gibi bir durum koduyla (durum & 0xFF) döner.

        •  Tüm system() çağrıları başarılı olursa dönüş değeri komutu çalıştıran alt kabuğun
           sonlanma durum kodudur. (Kabuğun sonlanma durum kodu, çalıştırdığı son komutun
           sonlanma durum kodudur.)

       Son iki durumda dönüş değeri, waitpid(2) sayfasında açıklanan makrolar (WIFEXITED(),
       WEXITSTATUS() vb.) kullanılarak incelenebilen bir "bekleme durumu" kodudur.

       system() herhangi bir başka alt sürecin bekleme durumunu etkilemez.

HATALAR

       system() fork(2) ile aynı hatalardan herhangi biriyle başarısız olabilir.

ÖZNİTELİKLER

       Bu bölümde kulllanılan terimlerin açıklamaları attributes(7) sayfasında bulunabilir.

       İşlev  Öznitelik      Değer
       system Evre Güvenliği ÇEG-evet

UYUMLULUK

       POSIX.1-2001, POSIX.1-2008, C89, C99.

EK BİLGİLER

       system() basitlik ve kolaylık sağlar: fork(2), execl(3) ve waitpid(2) çağrılarının tüm
       ayrıntılarını ve ayrıca gerekli sinyal yönlendirimlerini ele alır; ek olarak, kabuk komut
       için olağan ikameleri ve G/Ç yönlendirmelerini gerçekleştirir. system() işlevinin ana
       maliyeti verimsizliktir: kabuğu çalıştıran süreci oluşturmak ve kabuğu çalıştırmak için ek
       sistem çağrıları gerekir.

       _XOPEN_SOURCE özellik sınama makrosu tanımlanırsa (herhangi bir başlık dosyası dahil
       edilmeden önce), waitpid(2) içinde açıklanan makrolar (WEXITSTATUS(), vb.), <stdlib.h>
       dahil edildiğinde kullanılabilir hale gelir.

       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 (birsey) {
           int donen = system("foo");

           if (WIFSIGNALED(donen) &&
               (WTERMSIG(donen) == SIGINT || WTERMSIG(donen) == SIGQUIT))
                   break;
           }

       POSIX.1’e göre, system() işlevinin yürütülmesi sırasında pthread_atfork(3) kullanılarak
       kaydedilen işleyicilerin çağrılıp çağrılmayacağı konusu belirlenmemiştir. glibc
       gerçekleniminde bu tür işleyiciler çağrılmamaktadır.

       command NULL ise /bin/sh’nin kullanılabilirliğinin sınanması 2.1.3’ten önceki glibc
       sürümlerinde gerçekleştirilmezdi; bunun yerine her zaman kullanılabilir olduğu
       varsayılırdı ve system() bu durumda her zaman 1 döndürürdü. POSIX.1-2001 bir kabuk
       sağlamak için uyumlu bir uygulama gerektirmesine rağmen, çağıran uygulama daha önce
       chroot(2) çağrısı yapmışsa, kabuk kullanılabilir veya yürütülebilir olmayabileceğinden
       (POSIX.1-2001 tarafından bu durum belirtilmese de) Glibc 2.1.3’ten bu yana bu sınama
       yapılmaktadır.

       Alt süreçte bir kabuğun yürütülemediği durumdan ayırt edilemeyecek şekilde, system()
       işlevinden dönen 127 değeri nedeniyle kabuk komutunun 127 durum koduyla sona ermiş gibi
       görünmesi mümkündür.

   Yetersizlikler
       Ayrıcalıklı bir uygulama (kullanıcı ve grup kimliklerini değiştirebilen bir uygulama)
       içinden system() işlevini kullanmayın, çünkü sistem bütünlüğünü bozmak için bazı ortam
       değişkenlerine tuhaf değerler atanabilir. Örneğin, PATH, keyfi bir uygulamanın ayrıcalıklı
       yürütülmesi için tahrif edilebilir. Bunun yerine exec(3) işlev ailesini kullanın, ancak
       execlp(3) veya execvp(3) işlevini kullanmayın (bir yürütülebilir dosyayı aramak için PATH
       ortam değişkenini de kullanır).

       bash sürüm 2 başlatıldığında bir güvenlik önlemi olarak ayrıcalıkları düşürdüğünden,
       /bin/sh’nin bash sürüm 2 olduğu sistemlerde system() işlevi kullanıcı ve grup kimliklerini
       değiştirebilen uygulamalardan çağrıldığında düzgün çalışmayacaktır. (Debian, sh olarak
       çağrıldığında bunu yapmayan, dash(1) adlı farklı bir kabuk kullanır.)

       Komutun bir parçası olarak kullanılan herhangi bir kullanıcı girişi, beklenmeyen kabuk
       komutlarının veya komut seçeneklerinin yürütülmemesini sağlamak için dikkatlice
       temizlenmelidir. system() ayrıcalıklı bir uygulamadan kullanıldığında bu tür riskler
       özellikle ciddidir

İLGİLİ BELGELER

       sh(1), execv(2), fork(2), sigaction(2), sigprocmask(2), wait(2), exec(3), signal(7)

ÇEVİREN

       © 2003 Yalçın Kolukısa
       © 2022 Nilgün Belma Bugüner
       Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
       Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri yapmak için
       https://github.com/TLBP/manpages-tr/issues adresinde "New Issue" düğmesine tıklayıp yeni
       bir konu açınız ve isteğinizi belirtiniz.