消息队列 linux
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/msg.h>
#define MSG_TEST "/tmp/8"
struct msg_buf
{
intmytype;
char data;
};
int main(int argc,char **argv)
{
key_t key;
int pid;
int msgid,status;
struct msg_buf msgbuf;
key = ftok(MSG_TEST,'a');
printf("key = %X\n",key);
msgid = msgget(key,IPC_CREAT|0666);
if(msgid == -1)
{
printf("msg creat err\n");
return -1;
}
memset(&msgbuf,'\0',sizeof(msgbuf));
msgbuf.mytype = getpid();
strcpy(msgbuf.data,"hubei huang gang zhi ye ji shu xue yuan---->\n");
strcat(msgbuf.data,argv);
status = msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
if(status == -1)
{
printf("send msg err\n");
return -1;
}
memset(&msgbuf,'\0',sizeof(msgbuf));
status = msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),IPC_NOWAIT);
if(status == -1)
{
printf("rcv msg err\n");
return -1;
}
printf("This is msg:%s\n",msgbuf.data);
return 0;
} http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_555740.jpg
运行结果 (原文件名:111111111111.jpg) 不是打击你,这程序问题很多啊……
(1) 不是64-bit clean. (这里问题多了去了,比如struct msg_buf的定义就不对;假设了ftok(3)总是返回int类型的keyid)
(2) getpid()引用前未声明,需要添加#include <unistd.h>
(3) 没有判断argc的数值
(4) 出错的时候为啥不用perror(3)来报告出错信息,给用户/自己更多的提示……
(5) 没有任何边界检查,存在buffer overrun的问题 首先谢谢楼上的批评。
我这是MINI2440板子带的DEMO。
还有就是 这只是测试用,就比如 argc这个判断。测试你自己给自己找麻烦!呵呵`做人好执着哦!
页:
[1]