共享内存
ipcs 查看进程间通信的信号量 共享内存 消息队列 的使用情况
ipcrm 删除
共享内存的使用需要信号量同步
同步?
对临界资源的访问有控制,能保证同一时刻只有一个进程访问,则这两个进程是同步。
在不同地方,意义不同。 1.进程线程同步2.通信方式
同步和异步的方式?
同步:严格按照代码顺序执行,如果遇到需要等待的事件就阻塞等待
异步:不一定按照代码的顺序执行,有可能跳过一段代码执行,也有可能随时执行其他地方的代码。(打电话)
阻塞和非阻塞?
消息队列
1.msgget函数:该函数用来创建和访问一个消息队列。它的原型为:
int msgget(key_t key, int msgflg);
2.msgsend函数:该函数用来把消息添加到消息队列中。它的原型为:
int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);
3.msgrcv函数:该函数用来从一个消息队列获取消息,它的原型为
int msgrcv(int msgid, void *msg_ptr, size_t msg_st, long int msgtype, int msgflg);
4.msgctl函数:该函数用来控制消息队列,它与共享内存的shmctl函数相似,它的原型为:
int msgctl(int msgid, int command, struct msgid_ds *buf);
整个消息队列有两种类型的数据结构:
1、msqid_ds消息队列数据结构:描述整个消息队列的属性,主要包括整个消息队列的权限,拥有者、两个重要的指针分别指向消息队列的第一个消息和最后一个消息。
2、msg消息数据结构:整个消息队列的主体,一个消息队列有若干个消息,每个消息数据结构的基本成员包括消息类型、消息大小、消息内容指针和下一个消息数据结构位置。