gpt4 book ai didi

c - Linux编程。如何使用消息队列发送数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:53 25 4
gpt4 key购买 nike

我有 writer.c 和 reader.c,我正在尝试从 writer 发送数组,然后在 reader 中打印数字。

        //writer.c

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>

// structure for message queue
struct mesg_buffer {
int mesg_type;
int a[5];

} message;

int main()
{
message.a [0] = 5;
message.a [1] = 10;
message.a [2] = 15;
message.a [3] = 34;
message.a [4] = 34;

key_t key;
int msgid;

// ftok to generate unique key
key = ftok(".", 65);

// msgget creates a message queue
// and returns identifier
msgid = msgget(key, 0666 | IPC_CREAT);
message.mesg_type = 1;

// msgsnd to send message
for(int i=0;i<5;i++)
msgsnd(msgid, (int *) &message.a[i], sizeof(message.a[i]), 0);



// display the message
for(int i=0;i<5;i++)
printf("Data send is : %d \n", message.a[i]);

return 0;
}

阅读器.c

 // C Program for Message Queue (Reader Process) 
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>

// structure for message queue
struct mesg_buffer {
int mesg_type;
int a[5];
} message;

int main()
{
key_t key;
int msgid;

// ftok to generate unique key
key = ftok(".", 65);

// msgget creates a message queue
// and returns identifier
msgid = msgget(key, 0666 | IPC_CREAT);

// msgrcv to receive message
for(int i=0; i<5; i++)
msgrcv(msgid, &message, sizeof(message.a[i]), 1, 0);

for(int i=0; i<5; i++)
printf("Data Received is : %d \n",
message.a[i]);

// to destroy the message queue
msgctl(msgid, IPC_RMID, NULL);

return 0;
}

我首先运行 writer.c,这是我的输出:

Data send is : 5

Data send is : 10

Data send is : 15

Data send is :34

Data send is : 34

但是当我运行 reader.c 时,程序卡住了,什么也没有发生。对如何传递数组有什么建议吗?

编辑:似乎只传递 msgsnd 和 msgrcv 中的消息就解决了这个问题。

for(int i=0;i<5;i++)
msgsnd(msgid, &message, sizeof(message), 0);

最佳答案

您的代码调用了未定义的行为。

既然你想逐个整数发送,你应该使用sizeof(message.a[i]),what is size of one element,而不是sizeof(message. a),即整个数组a的大小。

msgsnd(msgid, (int *) &message.a[i], sizeof(message.a), 0);
^^^^^^^^^

简而言之,这意味着您在数组后面传递了一些垃圾。

关于c - Linux编程。如何使用消息队列发送数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53836925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com