进程消息队列实例
//write.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> struct mymesg{ long mtype;//消息的类型,是一个整数且大于0 char mtex[512];//消息数据本身,是第三个参数的内容 }; int mian() { char *str = "hello world"; struct mymesg m1; m1.mtype = 100; memcpy(m1.mtex, str, strlen(str)); key_t key = ftok("./", 0); //int msgget(key_t key, int msgflg) int msq_id = msgget(key, IPC_CREAT|IPC_EXCL|0777); if(msq_id < 0){ printf("create message queue failed\n"); return -1; } //ssize_t msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg) if(msgsnd(msq_id, &m1, sizeof(struct mymesg)-sizeof(long), 0) < 0){ printf("send failed\n"); } return 0; }
//read.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> struct mymesg{ long mtype;//消息的类型,是一个整数且大于0 char mtex[512];//消息数据本身,是第三个参数的内容 }; int mian() {struct mymesg m1; m1.mtype = 100; key_t key = ftok("./", 0); //int msgget(key_t key, int msgflg) int msq_id = msgget(key, 0777); if(msq_id < 0){ printf("open message queue failed\n"); return -1; } //ssize_t msgrcv(int msgqid,void *ptr,size_t nbytes,long type,int flag) if(msgrcv(msq_id, m1.mtex, sizeof(struct mymesg) - sizeof(long), m1.mtype, 0) < 0){ printf("receive failed\n"); }else{
printf("mtex = %s\n",m1.mtex);
} return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具