C程序IPC消息
我使用IPC进行两个程序的通信 我的发件人代码片段:C程序IPC消息,c,ipc,C,Ipc,我使用IPC进行两个程序的通信 我的发件人代码片段: int msgflg = IPC_CREAT | 0666; key_t key_id; struct msgbuf sbuf; size_t buflen; key_id = 1235; sbuf.mtype = 1; if (msgsnd(msqid, &sbuf, buflen, IPC_NOWAIT) < 0) { die("msgsnd"); } e
int msgflg = IPC_CREAT | 0666;
key_t key_id;
struct msgbuf sbuf;
size_t buflen;
key_id = 1235;
sbuf.mtype = 1;
if (msgsnd(msqid, &sbuf, buflen, IPC_NOWAIT) < 0)
{ die("msgsnd");
}
else {
mvprintw(8, 0, "%s", " ");
mvprintw(8, 0, "%s", sbuf.mtext);
}
if ((msqid = msgget(key_id, 0666)) < 0)
die("msgget()"); //break;
//Receive an answer of message type 1.
if (msgrcv(msqid, &rcvbuffer, MAXSIZE, 1, 0) < 0)
die("msgrcv");
mvprintw(curr_row + 1, 0, "Cleaning process monitor: %s", rcvbuffer.mtext);
int msgflg=IPC|u CREAT | 0666;
密钥\u t密钥\u id;
结构msgbuf-sbuf;
布弗伦尺寸;
key_id=1235;
sbuf.mtype=1;
如果(msgsnd(msqid和sbuf、buflen、IPC_NOWAIT)<0)
{die(“msgsnd”);
}
否则{
mvprintw(8,0,“%s,”);
mvprintw(8,0,“%s”,sbuf.mtext);
}
接收端:
int msgflg = IPC_CREAT | 0666;
key_t key_id;
struct msgbuf sbuf;
size_t buflen;
key_id = 1235;
sbuf.mtype = 1;
if (msgsnd(msqid, &sbuf, buflen, IPC_NOWAIT) < 0)
{ die("msgsnd");
}
else {
mvprintw(8, 0, "%s", " ");
mvprintw(8, 0, "%s", sbuf.mtext);
}
if ((msqid = msgget(key_id, 0666)) < 0)
die("msgget()"); //break;
//Receive an answer of message type 1.
if (msgrcv(msqid, &rcvbuffer, MAXSIZE, 1, 0) < 0)
die("msgrcv");
mvprintw(curr_row + 1, 0, "Cleaning process monitor: %s", rcvbuffer.mtext);
if((msqid=msgget(key_id,0666))<0)
模具(“msgget()”)//打破
//接收消息类型为1的应答。
if(msgrcv(msqid和rcvbuffer,MAXSIZE,1,0)<0)
模具(“msgrcv”);
mvprintw(当前行+1,0,“清洗过程监视器:%s”,rcvbuffer.mtext);
通信工作正常,但在接收器端接收到的消息未完全接收
如果我发送“你好”,它只接收“H”
我的缓冲区大小为200您不能直接用多行文字大小1声明struct msgbuf
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[1]; /* message data */
};
您需要做的是在结构中声明一个长字符数组,然后将其转换为void*
比如说,
struct msgbuf {
long type;
char mtext[200];
};
struct msgbuf mybuf;
// set type, store data in mtext
msgsnd(msqid, (void*)&mybuf, sizeof(msgbuf)+1, IPC_NOWAIT)
rcvbuffer
看起来像什么?我尝试了你的解决方案,但没有解决我的问题。我使用gcc编译代码,操作系统是Ubuntu。我的缓冲区大小是=buflen=strlen(sbuf.mtext)+1;声明为:size_t buflen;