【发布时间】:2017-06-18 17:36:45
【问题描述】:
我正在尝试了解消息队列。在我看到的示例中,msg strunct 将只有一个属性,但第一个属性(类型)必须是long。因此,它类似于struct msg{long mtype; char text[100]};。
我尝试添加一个新的int 属性x 以查看我是否同时收到了文本和数字,并且它有效。
这就是消息队列的工作方式吗?我可以在struct 中拥有尽可能多的属性吗?
另外,是否可以调用 msgrcv 和 msgsnd 函数并将长度参数设置为 sizeof(send) - sizeof(send.x),因为我知道结构的大小并不总是与 @ 的总和相同每个属性的987654330@?
谢谢。
int main(){
struct msg{
long mtype;
char text[100];
int x;
};
int key = ftok(".", 10);
int qid = msgget(key, 0666|IPC_CREAT);
int pid = fork();
if(pid == 0){
struct msg send;
send.mtype = 1;
strcpy(send.text, "hello");
send.x = 99;
if(msgsnd(qid, (void*)&send, sizeof(send) - sizeof(send.x), 0)<0){
printf("Error child: ");
}
}
else{
struct msg recieve;
if(msgrcv(qid, (void*)&recieve, sizeof(recieve) - sizeof(recieve.x), 1, 0)<0){
perror("Error parent: ");
};
printf("text: %s\nnumber: %d", recieve.text, recieve.x);
}
return 0;
}
【问题讨论】:
标签: c unix message-queue