【发布时间】: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