收到的消息中的IPC消息队列问号

时间:2017-11-29 19:52:41

标签: c unix command-line queue ipc

晚安。

我试图重现使用IPC Queue发送和检索消息的示例。 问题是当我打印消息f.ex。" aaaa"我看作输出" ????"。

receiver.c

int main(int argc,char * argv []){     int msqid;

int rc;
size_t msgsz;
struct {
    long int mtype;
    char * mtext;
} mymsg;

long int msgtype;

msqid = msgget(65536, IPC_CREAT | S_IRUSR | S_IWUSR);
struct mymsg message;

msgsz = sizeof(struct mymsg) - sizeof(long int);
msgtype = 1;
for (;;) {
    if (msgrcv(msqid, &message, msgsz, msgtype, IPC_NOWAIT) == -1) {
        perror("msgrcv");
        exit(1);
    }
    puts(message.mtext);
}

printf("Error code: \"%d\"\n", rc);
printf("The message received is: \"%s\"\n", message.mtext);
return EXIT_SUCCESS;

}

send.c

int rc;
    size_t msgsz;
    struct {
      long int mtype;
      char * mtext;
    } mymsg;

    long int msgtyp;

    msqid = msgget(65536, IPC_CREAT | S_IRUSR | S_IWUSR);


    mymsg.mtype = 1;
    mymsg.mtext = argv[1];

    struct mymsg message;

    msgsz = sizeof(struct mymsg) - sizeof(long int);

    //rc = msgsnd(msqid, &mymsg, msgsz, IPC_NOWAIT);

    while(fgets(mymsg.mtext, sizeof mymsg.mtext, stdin) != NULL) {
            int len = strlen(mymsg.mtext);

            /* ditch newline at end, if it exists */
            if (mymsg.mtext[len-1] == '\n') mymsg.mtext[len-1] = '\0';

            if (msgsnd(msqid, &mymsg, len+1, 0) == -1) /* +1 for '\0' */
                perror("msgsnd");
        }

        if (msgctl(msqid, IPC_RMID, NULL) == -1) {
            perror("msgctl");
            exit(1);
        }

这是我用C语言开始的。 我想把它扩展到更复杂的程序。

我正在关注beej文档。 http://beej.us/guide/bgipc/output/html/multipage/mq.html

我找不到关于这些问号的任何信息,或者可能缺乏知识。

将欣赏所有线索。

问候。

0 个答案:

没有答案