gpt4 book ai didi

linux - 消息队列 msgsnd 多行文本字段

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:10 25 4
gpt4 key购买 nike

当使用 msgsnd 时,手册页中提到的结构是

 struct mymsg {
long mtype; /* message type */
char mtext[1]; /* body of message */
};

但是如果你像这样使用它

func(char *array, int sizeofarray)
{
struct mymsg {
long mtype; /* message type */
char *ptr; /* body of message */
};

msgq.mtype = 1;
msgq.ptr = array;

msgsnd(msqid, &msgq, sizeofarray, 0);
}

将ptr分配给某个本地数组[200](数组可以作为函数中的参数获取),另一端收到的消息是垃圾消息。这是为什么?

最佳答案

它是垃圾,因为您指定的结构不是 msgsnd 想要的形式。它希望数据被复制到紧跟在内存中的 mtype 值之后,而不是在其他地方的数组中。

如果你想发送一个长度为 200 的数组,你需要这样做:

struct mymsg {
long mtype;
char mtext[200];
} foo;

foo.mtype = 1;
memcpy(foo.mtext, array, 200);

msgsnd(msqid, &foo, 200, 0);

关于linux - 消息队列 msgsnd 多行文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160970/

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