system v消息队列demo(未编译)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/stat.h>
#include <sys/msg.h>
#define MSG_FILE "server.c"
#define BUFFER 255
#define PERM S_IRUSR|S_IWUSR
struct msgtype{
long mtype; /*消息类型*/
char sBuffer[BUFFER+1]; /*数据成员,可有多个*/
};
int main()
{
struct msgtype msg;
key_t key;
int msgid;
if(-1 == (key=ftok(MSG_FILE,'a')) )
{
printf("ftok error\n");
exit(1);
}
msgid = msgget(key,PERM | IPC_CREATE |IPC_EXCL);/*返回一个消息队列的id*/
if(-1 == msgid)
{
printf("msgget error\n");
exit(1);
}
while(1)
{
msgrcv(msgid,&msg,sizeof(struct msgtype),,0);/*接受消息队列。long msgtype=1,呼应位于msgid消息队列中msgtype.mtype=1的第一个消息;msgflg = 0无消息是函数的动作,一般是0。*/
printf("some one say:%s",msg.sBuffer);
msg.mtype = 2;
msgsend(msgid,&msg,sizeof(struct msgtype),0);/*msgflg = 0*/
}
return 0;
}
int main(int argc,char **argv)
{
struct msgtype msg;
key_t key;
int msgid;
key = ftok(MSG_FILE,'a');
msgid = msgget(key,PERM);
msg.mtype = 1; /*设置1*/
strcpy(msg.sBuffer,argv[1]);
msgsend(msgid,&msg,sizeof(struct msgtype),0);
memset(&msg,0,sizeof(struct msgtype));
msgrev(msgid,&msg,sizeof(struct msgtype),,0);/*long msgtype=2*/
printf("her say :%s",msg.sBuffer);
return 0;
}
注意颜色对应关系,
还有,该队列 程序结束后并未删除,可用ipcrm删除。
最新文章
- python之路二十一
- td元素
- CE5 WiFi开关
- SQL总结(二)连表查询
- python(23)re函数:compile、match、search、findall
- noip赛前小结1
- 待研究之iOS硬件调研
- Failed to issue method call: Unit mysqld.service failed to load: No such file or directory.
- 开源库RxJava、ButterKnife学习记录
- Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)
- asp.net的<;% %>;特定用法
- 关于n维和n-1维欧式空间
- Spring Security之动态配置资源权限
- HAWQ配置之客户端访问
- python中os模块
- 数据在千万级别上进行全文检索有哪些技术?强大的大数据全文索引解决方案-ClouderaSearch
- [CEOI2017]Building Bridges
- 002_IO磁盘深入理解
- 在Linux下将TPC-H数据导入到MySQL
- POJ 1564 Sum It Up (DFS+剪枝)