晚安。
我试图重现使用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
我找不到关于这些问号的任何信息,或者可能缺乏知识。
将欣赏所有线索。
问候。