msgsnd/msgrcv功能描述
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
在使用msgsnd的时候,必须要获取一个msgID。
msgIDea的获取是通过msgget()函数
int msgget ( key_t key, int msgflg )
函数的第一个参数是消息队列对象的关键字(key),函数将它与已有的消息队
列对象的关键字进行比较来判断消息队列对象是否已经创建。而函数进行的具体操作是由
第二个参数,msgflg 控制的。它可以取下面的几个值:
IPC_CREAT :
如果消息队列对象不存在,则创建之,否则则进行打开操作;
IPC_EXCL:
和IPC_CREAT 一起使用(用”|”连接),如果消息对象不存在则创建之,否则产生一个
错误并返回。
如果单独使用IPC_CREAT 标志,msgget()函数要么返回一个已经存在的消息队列对象
的标识符,要么返回一个新建立的消息队列对象的标识符。如果将IPC_CREAT 和IPC_EXCL
标志一起使用,msgget()将返回一个新建的消息对象的标识符,或者返回-1 如果消息队列
对象已存在。IPC_EXCL 标志本身并没有太大的意义,但和IPC_CREAT 标志一起使用可
以用来保证所得的消息队列对象是新创建的而不是打开的已有的对象。
列对象的关键字进行比较来判断消息队列对象是否已经创建。而函数进行的具体操作是由
第二个参数,msgflg 控制的。它可以取下面的几个值:
IPC_CREAT :
如果消息队列对象不存在,则创建之,否则则进行打开操作;
IPC_EXCL:
和IPC_CREAT 一起使用(用”|”连接),如果消息对象不存在则创建之,否则产生一个
错误并返回。
如果单独使用IPC_CREAT 标志,msgget()函数要么返回一个已经存在的消息队列对象
的标识符,要么返回一个新建立的消息队列对象的标识符。如果将IPC_CREAT 和IPC_EXCL
标志一起使用,msgget()将返回一个新建的消息对象的标识符,或者返回-1 如果消息队列
对象已存在。IPC_EXCL 标志本身并没有太大的意义,但和IPC_CREAT 标志一起使用可
以用来保证所得的消息队列对象是新创建的而不是打开的已有的对象。