栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SIGIO到达文件描述符时,我没有设置它,并且当没有可能的IO时

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SIGIO到达文件描述符时,我没有设置它,并且当没有可能的IO时

啊,有趣。

简短的答案是,因为stdin是 可写的 ,所以SIGIO反复到达stdin ,并且单独地,您的SIGIO传递设置不正确。

为什么si_fd显然不可靠?

首先,您需要先指定SA_SIGINFO

sa_flags
才能安全使用
sa_sigaction
处理程序。

其次,

#define _GNU_SOURCE
在Linux
为您填充
si_fd
(和
si_band
)之前,您需要将F_SETSIG显式地添加到SIGIO
。有点傻,恕我直言,但事实如此。
si_fd
如您所发现的,没有这个,传入的值就没有意义。

为什么要反复交付SIGIO?

我猜您程序的stdin是从您调用的shell继承的,我猜它是一个终端设备并且是可写的。就像fd 0会持续 select(2)
可写一样,它也会连续为您生成SIGIO。

无论如何,

si_band
保持答案。启用F_SETSIG,,
#include<poll.h>
并检查
si_band
POLLIN,POLLOUT等,以确定哪些I / O事件使信号跳闸。

真的,stdin是可写的吗?

是的 尝试以下比较:

$ [ -w /dev/stdin ] && echo Yes, stdin is writeableYes, stdin is writeable# Endless SIGIOs$ ./my-sigio-prog^C# No SIGIO$ ./my-sigio-prog < /dev/null# Two SIGIOs, after a delay.  One for line-buffered "foon" and one for EOF$ { sleep 3; echo foo; sleep 3; } | ./my-sigio-prog


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号