为什么每次使用 EAGAIN 时 open() 都会失败?
Why does open() fails every time with EAGAIN?
为什么像 Apache 这样的程序无法打开普通文件? 运行 它在 strace
下显示:
open("access.log", O_WRONLY|O_CREAT|O_APPEND|O_CLOEXEC, 0666) = 11
11
代表 EAGAIN
或 EWOULDBLOCK
其中:
$ ls -l access.log
-rw-rw-rw- 1 root root 2 Jun 9 17:52 access.log
如果我 su
作为 www-data
我可以安全地写入文件。
11
是文件描述符,不是错误代码。这意味着您看到的 open
呼叫成功而不是失败。如果 open
失败,它将 return -1
并且 strace 将显示如下内容:
open("access.log", O_RDONLY) = -1 ENOENT (No such file or directory)
为什么像 Apache 这样的程序无法打开普通文件? 运行 它在 strace
下显示:
open("access.log", O_WRONLY|O_CREAT|O_APPEND|O_CLOEXEC, 0666) = 11
11
代表 EAGAIN
或 EWOULDBLOCK
其中:
$ ls -l access.log
-rw-rw-rw- 1 root root 2 Jun 9 17:52 access.log
如果我 su
作为 www-data
我可以安全地写入文件。
11
是文件描述符,不是错误代码。这意味着您看到的 open
呼叫成功而不是失败。如果 open
失败,它将 return -1
并且 strace 将显示如下内容:
open("access.log", O_RDONLY) = -1 ENOENT (No such file or directory)