Mesaj Kuyruğunda Bloke İşlemleri
msgsnd ve msgrcv fonksiyonlarının son parametresi flag parametreleridir. flag olarak ya 0
geçilir ya da IPC_NOWAIT geçilir. msgsnd fonksiyonunda bu parametre 0 geçilirse mesaj
kuyruğu dolduğunda msgsnd bloke olur. Şu olaylar blokenin açılmasını sağlar:
1) Kuyruktan mesaj alınarak kuyrukta yer açılması.
2) Mesaj kuyruğunun silinmesi, bu durumda msgsnd başarısızlıkla geri döner ve errno
EIDRM olur.
3) Bir signal oluşursa msgsnd başarısızlıkla geri döner ve errno EINTR ile set edilir.
Mesaj kuyruğu üzerinde üç limit söz konusudur.
1) Yaratılmış olan mesaj kuyruğundaki toplam byte sayısı
2) Mesaj kuyruğundaki toplam mesaj sayısı
3) Process’in yaratabileceği mesaj kuyruğu sayısı
msgsnd fonksiyonunda flag değeri olarak IPC_NOWAIT geçilirse bu durumda mesaj kuyruğu
dolu olsa bile fonksiyon bloke olmaz. Başarısızlıkla yani –1 ile geri döner. errno EAGAIN
biçiminde set edilir.
msgrcv fonksiyonundaki flag parametresi de benzerdir. Flag 0 olarak girilirse kuyruk boş
olduğu sürece ya da ID ile belirtilen değere ilişkin mesaj yoksa fonksiyon bloke olur.
Fonksiyonun blokesi şu durumlarda çözülür:
1) İstenen ID’ye uygun mesaj kuyruğa yerleştirildiğinde
2) Mesaj kuyruğu silinmiştir. Bu durumda msgrcv başarısız olur ve errno EIDRM olarak set
edilir.
3) Bir signal oluşursa msgrcv başarısızlıkla geri döner ve errno EINTR olarak set edilir.
msgrcv fonksiyonunda flag olarak 0 yerine IPC_NOWAIT girilirse process bloke olmaz,
fonksiyon başarısız olur. errno ENOMSG biçiminde set edilir