2016-04-06 15 views
0

İleti kuyruğu arası işlem iletişimi için bir anahtarım var, örneğin key_t = 10. Ben Şu anda mevcut olan mesire yanında kodunun altına kullanarak veya dönüş hatasıİleti kuyruğu kimliğini alın Sağlanmış

msgget((key_t)10,IPC_EXCL|IPC_CREAT|0777) 

kullanmıyorum 10. ileti sırası zaten anahtar değeri ile varsa kuyruk kimliğini almak istiyorum ama kuyruk kimliğini almak istiyorum ve kapatmak gerekiyor.

cevap

1

Varolan ileti sırası tanımlayıcısını almak için msgget işaretini IPC_EXCL bayrağını kullanmadan kullanabilirsiniz.

mid = msgget((key_t)10, 0); 

Sonra, o tanımlayıcıyı kullanarak IPC_RMID bayrağıyla msgctl kullanarak mesaj kuyruğu kaldırmak kullanabilirsiniz.

DÜZENLEME:

key_t ftok(char *pathname, char proj_id); 
+0

Seni çok @ Sat ederiz. İleti kuyruğum için benzersiz 'key_t' öğesini nasıl oluşturabilirim, çünkü bazıları 'key_t = 10' kullanıyorsa, çakışma olur mu? –

+0

@BhavithCAcharya, Benzersiz bir 'Sistem V IPC anahtarı 'oluşturmak için' ftok' kullanabilirsiniz. – sat

+0

Teşekkürler @sat. Başka bir sorum var ama aptal gibi görünüyor bana yardım et. key_t ftok kullanırsam ("tmp/mykey", "b"); Anahtar oluşturulduktan sonra sürecimi öldürüyorum, böylece çekirdekimde hala ileti kuyruğu var. Bu yüzden vi/tmp/mykey kullanarak/tmp/mykey açıyorum ama anahtar görünmüyor fakat ipcs -q komutunda görülebilir –