Linux 消息队列msgrcv指定阻塞时间

想要把msgrcv 包装成可以指定阻塞时间的函数,我是这样做的,不知是否可行,有没有设计不足。

int my_msgrcv(int msgid,void * msg,int len,long msgtype,int sec)
{
    struct sigaction saNew, saOld;
  saNew.sa_handler = handler;
  sigemptyset(&saNew.sa_mask);
  sigaddset(&saNew.sa_mask, SIGALRM);
  saNew.sa_flags = 0;
  sigaction(SIGALRM, &saNew, &saOld);
    alarm(sec);
    int ret =msgrcv(msgid,msg,len,msgtype,0);
    alarm(0);
    sigaction(SIGALRM, &saOld, NULL);
    return ret;
}

完全不需要,可以探测消息队列中的消息。 用循环+sleep 来探测,超出次数认为失败。记得把请求的msgsnd的消息取出来
```int peek_message( int qid, long type )
{
int result, length;
if((result = msgrcv( qid, NULL, 0, type, IPC_NOWAIT)) == -1)
{
if(errno == E2BIG)
return(TRUE);
}
return(FALSE);
}