c - 系统调用和 EINTR 错误代码

标签 c posix interrupt system-calls eintr

有没有专家可以帮助我解决以下问题?

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

access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()

我想知道它们是否会因错误代码 -1 和错误号 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 的系统调用中添加了一些 EINTR/EAGAIN 处理:https://gitorious.org/zepto-web-server/zepto-web-server/commit/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd

最佳答案

除非你安装了一个中断信号处理程序(一个安装了 sigaction 省略了 SA_RESTART 标志,或者一个安装了 signal 功能在一些系统),你不应该期望看到 EINTR

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

关于c - 系统调用和 EINTR 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729901/

相关文章:

c - 在没有 float 的情况下处理 C 中的小数

c - 了解 C 中的空指针

c、从头开始shrink分配的空间

c - 信号处理问题

c - 使用文件描述符打开读取文件

c - #define 应该在宏周围添加空格吗?

检查页面是否被锁定?

c - ATmega32U4 : enabling interrupts hangs

c++ - 使用线程 C++ 停止 while 循环

assembly - 如果处理器不产生中断,系统软件必须做什么?