【问题标题】:Which system calls can return EINTR or EAGAIN error codes? [closed]哪些系统调用可以返回 EINTR 或 EAGAIN 错误代码? [关闭]
【发布时间】:2014-11-01 02:25:56
【问题描述】:

以下哪些系统调用可以返回 EINTR 或 EAGAIN/EWOULDBLOCK?

getsockname()
chdir()
bind()
fcntl()
listen()
setsid()
setsockopt()
socket()
stat()
unlink()
access()
accept()
open()
usleep()
dup2()
fork()
waitpid()
wait()
read()
write()

其中一些系统调用在出错时返回 EINTR 或 EAGAIN(通过手册页的 API)。

还有一些系统调用,API 不引用 EINTR/EAGAIN 而是返回这些。

请帮忙。

【问题讨论】:

  • 叫我疯了,但这听起来像是一个家庭作业问题......
  • 许多系统调用可以返回这些错误代码。要检查的地方之一是POSIX 2008/2013 specification。您可以依次单步执行每个函数并检查 EINTR 或 EAGAIN 是否是有效的错误代码。或者您可以浏览系统上的手册页。我不知道有哪个在线资源会在一个页面上列出系统调用和错误代码——它会是一个很大的页面。
  • 我知道手册页或 Open Group 规范可用于此类信息,但我知道许多人会处理一些系统调用的 EINTR/EAGAIN 错误代码,这些代码在手册页或在规范中。这可能会发生,因为某些系统调用可能使用返回 EINTR/EAGAIN 的其他系统调用。只有当手册页或规范引用它时,我才应该处理 EINTR/EAGAIN 吗?

标签: c posix system-calls interruption manpage


【解决方案1】:

我找到了答案。这个问题不应该被删除。通常,只有“慢”的系统调用才会返回 EINTR。缓慢的事情是终端 I/O 和等待的事情(选择、等待、睡眠、暂停等)。

【讨论】:

    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2021-10-19
    • 2012-04-26
    • 2014-10-19
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多