我正在使用IPC进行2个程序通信。
我的发件人代码片段
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);
通信工作正常,但接收方收到的消息未完全收到。
如果我发送“你好”,它只收到“H” 我的缓冲区大小是200
答案 0 :(得分:1)
您无法直接使用mtext size 1
声明struct msgbufstruct 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)