目录
一、线程和进程的概念
1.线程:
2.进程:
3.ipcs:
二、消息队列代码--写消息
//man msgget返回值问题
//添加消息队列 man msgsnd
//运行代码
//运行结果图
//进程和消息的状态
三、消息队列代码--读消息
//b.c读取消息
//执行b程序结果
//读完全部消息继续读
//解除阻塞
//可以有多个进程,至少有两个(一个读取一个写入,可以多个写入多个读入)
进程内部的一条执行路径(序列)
一个正在运行的程序
显示消息队列中都有哪些用户创建了消息队列
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);//id,地址,数据大小,标志位
#include
#include
#include
#include
#includestruct mess
{long type;//长整形,代表消息类型char data[128];
};int main()
{int msgid =msgget((key_t)1235,IPC_CREAT|0600);if(msgid==-1){ exit(0);} //将mess结构体添加到消息队列中struct mess dt; dt.type=1;//大于等于1的数字,代表类型strcpy(dt.data,"hello1");msgsnd(msgid,(void*)&dt,128,0);
}
a已经进程结束了,但是a进程创建的消息队列没有结束
#include
#include
#include
#include
#includestruct mess
{long type;char data[128];
};int main()
{//得到idint msgid =msgget((key_t)1235,IPC_CREAT|0600);if(msgid==-1){exit(0);}//获取消息struct mess dt; msgrcv(msgid,(void*)&dt,128,1,0);//如果第四个数字为0,那什么类型的消息都可以接收,否则数字为几就接收哪种类型printf("read:%s\n",dt.data);//打印消息
}
~
读取消息,读一次消息- 1
此时已经将所有消息都读完了,如果继续读消息会阻塞
再添加一个消息队列解除阻塞
b进程读不到a进程创建的消息
若a进程写入的是3号类型消息,b进程只能读1号类型的消息,那么a创建再多的消息,b也无法读到,会一直堵塞。
若想被b接收,可将类型改为0,代表的含义是不区分消息队列,可以接收全部的消息。
上一篇:6.事件绑定指令 v-on
下一篇:编译器相关