gpt4 book ai didi

c - 选择不能正常工作

转载 作者:太空狗 更新时间:2023-10-29 11:29:53 25 4
gpt4 key购买 nike

在我的应用程序中,当警报触发时,我将一个整数从信号处理程序写入管道。在我的主应用程序中,我永远循环使用 0 超时值的 select()。问题是信号处理程序成功写入管道的写入端,但选择从不显示管道读取端的可读性。所以在下面的伪代码中,select 的返回值为 0。甚至更令人费解的是,如果我删除 select 并简单地执行阻塞 read(),它就可以工作!!!我可以读取处理程序写入的整数。只是select总是认为管道的读端不可读,所以总是返回0。

所以伪代码看起来像

int x=0;
for(;;)
{

x = select(maxfd, &readfd, NULL, NULL, &dontWait); // dontWait is timeval with tv_sec and tv_usec = 0
if (x == 1)
//check for read descriptor and do something
}

最佳答案

select 函数将修改 设置和超时。在 select 调用之前,您必须重新初始化描述符集并使循环的每次迭代超时。

此外,您不应该真正使用 if (x == 1),而应该使用 if (FD_ISSET(some_fd, &readfd))。请记住,maxfd 应该是任何集合中使用的最大文件描述符加上一个

关于c - 选择不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796270/

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