-1

2つのプログラムの通信に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");  

}  
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);

通信は完全に機能していますが、受信側で受信したメッセージは完全には受信されていません。

「Hello」を送信すると、「H」のみが受信されます。バッファサイズは 200 です

4

1 に答える 1

1

mtext サイズが 1 の struct msgbuf を直接宣言することはできません

struct msgbuf {
    long mtype;       /* message type, must be > 0 */
    char mtext[1];    /* message data */ 
};

あなたがする必要があるのは、構造体で long char 配列を宣言し、それを 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)  
于 2012-06-05T12:38:36.933 に答える