UNIX环境高级编程:进程管理和通信
创建/打开消息队列( 创建的消息队列的数量会受到系统消息队列数量的限制 ) int msgget( key_t key, // 和消息队列关联的key值 int flag //消息队列的访问权限 ); 返回值: 成功:消息队列的ID 出错:-1 添加消息( 按照类型把消息添加到已打开的消息队列末尾 ) int msgsnd( int msqid, //消息队列的ID const void *msgp, //指向消息结构msgbuf. size_t size, // 发送的消息正文的字节数(LEN) int flag //IPC_NOWAIT:消息没有发送完成函数也会立即返回;0:直到发送完成函数才返回。 ); 返回值: 成功:0 出错:-1 读取消息( 按照类型把消息从消息队列中取走 ) int msgrcv( int msgid, //消息队列的ID void* msgp, //接收消息的缓冲区 size_t size, //要接收的消息的字节数 long msgtype, int flag ); 参数: msgtype: 0:队列中最早的消息 >0:指定接收类型 <0:按优先级接收 接收消息队列中类型值不小于msgtyp的绝对值且类型值又最小的消息。 flag: 0:若无消息函数会一直阻塞 IPC_NOWAIT:若没有消息,进程会立即返回ENOMSG。 返回值: 成功:读取的消息的长度 出错:-1 控制消息队列( 可以完成多项功能 ) int msgctl ( int msgqid, //消息队列的队列ID int cmd, struct msqid_ds *buf ); 参数: cmd: IPC_STAT:读取消息队列的属性,并将其保存在buf指向的缓冲区中。 IPC_SET:设置消息队列的属性。这个值取自buf参数。 IPC_RMID:从系统中删除消息队列。 buf:消息队列缓冲区 返回值: 成功:0 出错:-1 信号灯(semaphore) 信号灯也叫信号量。它是不同进程间或一个给定进程内部不同线程间同步的机制。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |