2009-11-05 56 views
0

我有一個消息隊列,我從中獲取消息循環。問題是我不知道如何退出循環。 msgrcv返回類型size_t,所以它繼續前進。我應該比較什麼值的返回值,所以我可以退出循環?IPC消息隊列。 msgrcv系統調用。系統V.如何走出循環

while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){ 
    printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3); 

回答

1

因爲你的最後一個參數不包括IPC_NOWAITmsgrcv蓋帽,等待未來的消息。

如果沒有要立即讀取的消息,msgrcv(..., ... | IPC_NOWAIT)將返回(size_t)-1並設置errno = ENOMSG