Efe ÇİFTCİ

Bilgisayar Mühendisi, Özgür Yazılımcı, Trekkie.

wait.h 20 Nisan 2015


Birden fazla process ile çalışan kod yazarken bazen wait() / waitpid() sistem çağrılarını kullanmak gerekebilir, bu sistem çağrıları child process yaratan parent process’lerin child’ların bitmelerini beklemek için kullanılır. Örneğin bir child process bir dosyaya yazma yapıyorsa ve parent process daha sonra bu dosyadan okuma yapacaksa önce child’ın tamamen sonlanmasını beklemesi gerekir çünkü child henüz daha dosyaya yazmayı bitirmemişken parent’ın bu dosyadan okuması hatalı sonuçlara yol açabilir.

wait()’in kullanılabilmesi için yazılan kodun en üstüne “#include <sys/wait.h>” satırının eklenmesi gerekir. Ancak bazı kodlarda bu satırın “#include <wait.h>” şeklinde yazıldığını da gördüm. Peki hangisi doğru? diye /usr/include dizini altına bakınırken aslında iki dosyanın da sistemde varolduğunu öğrendim:

$ find /usr -iname 'wait.h'
/usr/include/wait.h
/usr/include/x86_64-linux-gnu/sys/wait.h

Birbirinin sembolik linki olmayan bu iki farklı dosyanın içeriklerine baktığımda ise sys/wait.h olanı içersinde bir .h dosyasından bekleyebileceğim tanımlarla karşılaşmışken ilk wait.h dosyasının içeriğinin güldürecek kadar basit tutulduğunu gördüm:

$ cat /usr/include/wait.h
#include <sys/wait.h>

Muhtemelen BSD, Solaris, Linux vs gibi farklı platformlar arasındaki kod uyumluluğu artırmak için alınmış bir önlem olsa gerek.