gpt4 book ai didi

c - msgrcv : Invalid Arguments 错误

转载 作者:行者123 更新时间:2023-11-30 16:05:15 26 4
gpt4 key购买 nike

我正在unix系统上用C编写代码。我创建了一个消息队列服务器。每次我收到新消息时,我都会 fork ,并且子进程会处理新客户端。服务器等待新的客户端。这是代码。

for (;;)
{
struct my_msgbuf buf;

if (msgrcv (msqid, &(buf.mtype), sizeof (buf), 1, 0) == -1)
perror ("msgrcv");


if((pid = fork())<0)
perror("fork");


if(pid==0)
{
//child code
}
}

现在代码适用于第一次迭代,但在第二次迭代时 msgrcv 给出以下错误 -msgrcv:无效参数而不是等待新消息。

最佳答案

msgrcv 确实采用 msgsz 参数,但它不是 struct my_msgbuf 的大小,而是结构体的mtext[]字段。

我认为你不应该直接使用struct msgbuf。用适当的空间定义自己的内容是正常的。按照您的方式,您的 buf 声明仅分配 1 个字节,然后代码告诉内核您有 sizeof buf 字节,但您没有。因此,该代码据说会调用未定义行为或 UB。

这可能会或可能不会解释EINVAL,但人们应该始终修复已知的错误并重新测试,因为 UB 污染了进一步的分析......

关于c - msgrcv : Invalid Arguments 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586006/

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