IPCメッセージ・キュー。 msgrcvシステムコール。システムV.どのようにループから抜け出すために

StackOverflow https://stackoverflow.com/questions/1682676

質問

私はループ内でメッセージを取得していたから、メッセージキューを持っています。問題は、私はループを終了する方法がわからないということです。それがいっているようにmsgrcv戻っはsize_t型と入力します。私は、ループを終了することができますので、どのような値Iは、戻り値を比較する必要がありますか?

while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
    printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
役に立ちましたか?

解決

今後のメッセージを待っている間、あなたの最後のパラメータはIPC_NOWAITmsgrcvブロックが含まれていないので。

すぐに読むべきメッセージがない場合は、msgrcv(..., ... | IPC_NOWAIT)(size_t)-1と設定errno = ENOMSGを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top