首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统调用和EINTR错误代码

系统调用和EINTR错误代码
EN

Stack Overflow用户
提问于 2014-09-08 17:33:52
回答 4查看 6.6K关注 0票数 6

有什么专家能帮我做下面的事吗?

我在C中有以下系统调用:

代码语言:javascript
复制
access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()

我想知道他们是否可能在错误代码-1和errno EINTR/EAGAIN中失败。

为了这些我应该处理EINTR/EAGAIN吗?

这些文档没有提到任何与EINTR/EAGAIN相关的内容,但是我看到很多人都在处理它。

哪个是正确的?

下面是我如何注册信号处理程序:https://gitorious.org/zepto-web-server/zepto-web-server/source/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd:src/signal-dispatcher-utility.c

使用此配置:https://gitorious.org/zepto-web-server/zepto-web-server/source/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd:src/server-signals-support-utility.c

这里还有一个提交,我在一些我知道返回EINTR或EAGAIN:https://gitorious.org/zepto-web-server/zepto-web-server/commit/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd的系统调用中添加了一些EINTR/EAGAIN处理

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-08 17:38:51

参见http://man7.org/linux/man-pages/man7/signal.7.html --开始阅读底部的内容,其中提到“中断系统调用和库函数.”这是一个Linux手册页,但是这个信息通常适用于任何Unix/Posix/Linux风格的系统。

票数 4
EN

Stack Overflow用户

发布于 2014-09-08 17:41:22

除非您安装了一个中断信号处理程序(一个安装在sigaction上,省略了SA_RESTART标志,或者一个在某些系统上安装了signal函数),否则您不应该期望在所有中都会看到EINTR

在您特定的函数列表中,除了fcntl之外,我没有看到任何可以体验到fcntl的函数,而且只有当它用于锁定时才能使用。但是,John的答案中的链接应该有助于回答有关特定功能的问题。

票数 5
EN

Stack Overflow用户

发布于 2014-09-08 18:13:55

在*NIX系统调用的每个手册页中都有一个题为错误的部分。参考手册,例如:http://man7.org/linux/man-pages/man2/accept.2.html。您还可以使用命令行man accept查看它。

通常,需要一些时间计算的系统调用可以在信号传递时设置-1+EINTR,而短系统调用则不设置。例如,accept()可以阻止您的进程,这样它就可以被信号中断,但是setsid()太短了,以至于它已经被写成不能被信号中断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25729901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档