gpt4 book ai didi

cygwin 上使用 FD_SET() 和消息队列进行核心转储

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

我有以下 C 代码,用于设置 select() 以监听 TCP 套接字和消息队列上的传入数据:

fd_set readSet;
u32 maxFD = 0;
mqd_t parentQueue;
int serverSocket;

/* not shown: parentQueue and serverSocket were successfully opened */

FD_ZERO(&readSet);
FD_SET(serverSocket,&readSet);
FD_SET(parentQueue,&readSet);

/* next, not shown: block with select() and I/O processing */

我的问题是当我添加消息队列时代码崩溃(带有核心转储)使用FD_SET()、FD_SET(parentQueue,&readSet)来读取Set。

手册页指出,在 Linux 上,mqd_t 可以与 select() 一起使用。而parentQueue对应于一个有效的mqd_t,通过mq_open()获得。那么为什么 FD_SET() 会崩溃呢?是因为在 Cygwin 上,消息队列不是文件吗?但我可以在/dev/mqueue 中看到队列。

最佳答案

经过一番挖掘,我发现了问题所在。在cygwin上,队列文件描述符(mqd_t)是64位长(我使用的是64位系统),并且由于队列文件描述符超出了select FD_SETSIZE的范围,导致FD_SET崩溃

关于cygwin 上使用 FD_SET() 和消息队列进行核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138453/

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