Linux POSIX IPC 消息队列(2)

如果sevp是NULL且当前进程已经被注册过了,则去注册,以便其他进程注册

union sigval { /* Data passed with notification */ int sival_int; /* Integer value */ void* sival_ptr; /* Pointer value */ }; struct sigevent { int sigev_notify; /* Notification method */ int sigev_signo; /* Notification signal */ union sigval sigev_value; /* Data passed with notification */ void(*sigev_notify_function) (union sigval); //Function used for thread notification (SIGEV_THREAD) void* sigev_notify_attributes; // Attributes for notification thread (SIGEV_THREAD) pid_t sigev_notify_thread_id; /* ID of thread to signal (SIGEV_THREAD_ID) */ };

sigev_notify使用下列的宏进行配置:

SIGEV_NONE调用进程仍旧被注册,但是有消息来的时候什么都不通知

SIGEV_SIGNAL通过给调用进程发送sigev_signo指定的信号来通知进程有消息来了

SIGEV_THREAD一旦有消息到了,就激活sigev_notify_function作为新的线程的启动函数

mq_close() //关闭消息队列描述符mqdes,如果有进程存在针对这个队列的notification request,那么也会被移除 //成功返回0,失败返回-1设errno //Link with -lrt. int mq_close(mqd_t mqdes); mq_unlink(): //移除队列名指定的消息队列,一旦最后一个进程关闭了针对这个消息队列的描述符,就会销毁这个消息队列 //成功返回0,失败返回-1设errno //Link with -lrt. int mq_unlink(const char *name);

本文永久更新链接地址

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4e9844abacc72218a75dae4a64633105.html