UNIX KOMUTLARINA ERİŞİM
PROGRAM ÇATALLAMA ve ÇALIŞTIRMA
Bu bölümde C dilinde kullanılan çatallama (fork), çalıştırma (exec) ve system deyimleri hakkında açıklama bulunur. Kısaca özetlemek gerekirse bu komutlar çocuk işlemi başlatmak için kullanılır. Bu komutlarla başlatılan bir işlemin velisi işlemi başlatan programdır. İşlem hata kodu (başarılı bitip bitmediği bilgisi) veli programa ilgili işlevin dönüş değeri olarak geri döner. Hata durumlarında program errno değişkeninin aldığı değerden hatanın türünü belirleyebilir.
- System işlevi :
Bu işleve parametre olarak verilen dizi (karakter array) işletim sistemi tarafından bağımsız olarak çalıştırılan bir programdır. Diğer bir deyimli işletim sistemi parametreyi komut satırı olarak algılar. Bu işlev parametresini çağıran programın çocuğu olarak başlatırken, çağıran program çocuğun işlemini bitirmesini bekler. "system" işlevi çağıran programa, çocuk işleminin bitiş kodunu döndürür.
örnek : ... ret = system("ls -l > atmp"); if(ret < 0) { printf("%d nolu hata oldu.\n", errno); exit(0); } ...
Bu örnekte yer alan "ls -l > atmp" komutu bitmeden "system" işlevi programa bir değer döndürmez. Dönen değer işlem doğru çalışmış ise 0 hata oluşmuş ise -1 dir.
Bu serideki işlevler belirtilen kütüğü belleğe yükleyip çalıştırmak için kullanılır. Bu tür işlevler programın bellekteki görüntüsünü yenilemek amacı ile de kullanılır. Diğer bir deyimle yeni kopyayı belleğe yüklemeye yarar.
Bu işlev, çalışan bir programın tüm değişkenleri ile bellekte yeni kopyasının yaratmasına ve aynı komuttan başlayarak çalıştırılması için kullanılır.
fork işlevi yalnız işlem numarası ve velisinin işlem numarası farklı bir çocuk üretir. Yani kendisinin kopyasıdır. Fork işlevi başarı ile tamamlandığında veliye çocuğun işlem numarası, çocuğa da 0 değeri geri döner. Her iki program da bu işlevin altındaki ilk komuttan birbirinden bağımsız çalışmaya başlar. Tüm açık kütükler, tüm özellikleri ile çocuğun kullanımına açıktır. Ayrıca bellekteki bilgi alanlarının değerleri de çocuğa taşınmıştır.
Çatallama işlevini anlamak benim yıllarımı aldı. O zamanlar bu tür işleve uygun bir uygulama bulamadığımdan olayı canlandıramamıştım. Ancak TCP/IP kullanımı ile bu kavram daha belirgin oldu. Şimdi vereceğim örnekler de bu konuyla ilgili. Diyelim bir hattan gelen mesajı dinliyorsunuz. Program doğru mesajı aldığını anlayınca protokol gereği yapması gereken işlemler için hemen bir çocuk işlem üretir ve tekrar hattı dinlemeye başlar. Çocuk işlem, velisi hattan gelecek yeni bir bağlantıyı beklerken eski bağlantının cevaplarını velisinden bağımsız olarak vermeye devam eder. Böylece aynı anda aynı program ile birbirine karışmadan birden çok bağlantının mesajları algılanır.
Konuya örnek için TCP/IP Programları adlı belgeye bakın.
Ana Sayfaya Teknik Bilgiler Sayfasina

