消息队列

创建消息队列

获取消息队列ID

key_t ftok( const char * fname, int id )

msgget(0x1234,0666| IPC_CREAT);


接收消息队列

struct msgbuf{

long mtype;

char mtext[MsgHax];

};

int main(void){

key_t key;

key=ftok("./msgseedfile",'a');

printf("key =[%x]\n",key);

int msgid;

msgget(0x1234,0666);

//错误码ENOENT 消息队列不存在

if(msgid == -1){

if(errno == ENOENT){

printf("消息队列不存在");

}

perror("msgget err");

return -1;

}

struct msgbuf buf;

memset(&buf,0,sizeof(struct msgbuf));

int n;

ret = msgrcv(msgqid,&buf,MsgHax,IPC_NOWAIT);

if(ret < 0){

perror("msgsend error");

return -1;

}

buf.mtext[ret] = '\0';

printf("消息队列消息%s \n",buf.mtext);

return 0;

}


发送消息

struct msgbuf{

long mtype;

char mtext[1024];

};

int main1(void){

int msgid;

int ret=0;

msgid = msgget(0x1234,0666 | IPC_CREAT | IPC_EXECL);

if(msgid == -1){

if(errno == ENDENT){

printf("消息队列不存在\n");

}

if(errno == EEXIST){

printf("消息队列已经存在\n");

}

return -1;

}

struct msgbuf buf;

memset(&buf,0,sizeof(struct msgbuf));

buf.mtype = 1;

strcpy(buf.mtext,"11111111111dasd23dasdsa");

ret = msgsnd(msgqid,&buf,10,IPC_NOWAIT);

if(ret < 0){

perror("msgsend error");

}

return 0;

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容