while ((ret=msgrcv(msgid,&msgstr,RCVBUFLEN,msgtype,IPC_NOWAIT)) < 0) { if (++i>;100) return -1; if (errno==EINTR||errno==EAGAIN||errno==ENOMSG){ usleep(20000); errno=0; continue; } syslog( "receive data err",__FILE__...
在fedora7.0平台上写一个消息队列的代码,有一个奇怪的问题请教: 如果用msgget(key, IPC_CREAT | 0600)来创建消息队列,在colinux上的fedora7.0可以正常运行,但是在vmware上的fedora7.0却提示“Permission denied”,如下: [lb@lb server]$ ./server msgget:create: Permission denied 还是在vmware上的fedora7.0,如果用msgget(key, IPC_CREAT | 0000)来创建消息队列,那么,msgget似乎可以了,可是在msgrcv的时候又出错了,...
[code]#include "my.h" int main(int argc,char * argv[]) { int mqid; long type; char buff[10]; char * mem_pointer; int f; int shmid; type=100; mqid=msgget(ftok("~/progame/network/ipc",0),O_RDWR); msgrcv(mqid,buff,10,type,0); shmid=shmget(SHMKEY,MAXLINE,0777); mem_pointer=shmat(shmid,(void *)ADDRESS,0); printf("%s",mem_pointer); printf("%s",buff); shmdt(mem_pointer); msgctl(mqid,IPC_R...
消息队列结构体 struct msg_buf /* 消息结构 */ { long msgType; //消息类型 unsigned char msgText[1500]; //消息正文 }suMsgBuf; [code] printf("1ip地址 = [%s], 用户 = [%s], 密码 = [%s], 数据库名称 = [%s]\n", serverID, g_user, pswd, DbName); memset(&suMsgBuf, 0, sizeof(suMsgBuf)); ret = msgrcv(s_TETOSWmsqid, &suMsgBuf, sizeof(suMsgBuf), 0, 0); if( ret < 0 ) { printf("msgrcv error\n"...
我的程序在执行msgrcv后 返回值是0,那也就是说没有从消息队列中取到值吧。但参数中的msgbuf的值怎么会改变了呢? msgrcv( (int) mc_answ_msg, (struct msgbuf*)mc_msg, sizeof(MC_ANSW_MSG_R) - sizeof(long),(long) MC_RD_FIRST_MSG, 0)
[code]
#include