gpt4 book ai didi

C mqueue 不发送或接收整个消息

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

我尝试使用消息队列实现一个简单的 C 程序,但是该队列不会发送或接收长度超过 8 个字符的消息。我试图正确设置所有参数,但我一定遗漏了一些东西。

下面是代码和输出。

代码:

int main()
{
mqd_t mq = mq_open("/mq", O_RDWR | O_CREAT, 0666, NULL);
if (mq == -1) exit(1);

char* mes = "adventure";
int n = mq_send(mq, mes, sizeof(mes), 0);
char* mes2 = "eightcharacters";
n = mq_send(mq, mes2, sizeof(mes2), 0);
if (n == -1) exit(1);

struct mq_attr attr;
int buflen;
char *buf;

mq_getattr(mq, &attr);
buflen = attr.mq_msgsize;
buf = (char *) malloc(buflen);

printf("buflen: %d\n", buflen);

n = mq_receive(mq, (char *) buf, buflen, NULL);
if (n == -1) { exit(1); }

printf("%s\n",buf);

n = mq_receive(mq, (char *) buf, buflen, NULL);
if (n == -1) { exit(1); }

printf("%s\n",buf);

free(buf);
mq_close(mq);
return 0;
}

输出:

buflen: 8192
adventur
eightcha

最佳答案

给定代码

char* mes = "adventure";
int n = mq_send(mq, mes, sizeof(mes), 0);

sizeof(mes)指针 mes 的大小,而不是它指向的字符串的长度。

关于C mqueue 不发送或接收整个消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555120/

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