系统调用和EINTR错误代码

Efs*_*dis 6 c posix interrupt system-calls eintr

那里有专家可以帮助我以下吗?

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

access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()
Run Code Online (Sandbox Code Playgroud)

我想知道他们是否会因错误代码-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

R..*_*R.. 5

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

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


Joh*_*all 4

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

  • 我已经读过它,对于我已经处理过 EINTR 的引用系统调用。但是,只有这些是返回 EINTR 的系统调用吗?我不这么认为。许多人在其他系统调用中处理 EINTR,但他们的手册页没有引用它。为什么要这样做?这是一个很好的练习还是像魔术一样? (2认同)