在ST中将STDIN,STDOUT,STDERR重定向到/ dev/null

Pau*_*aul 13 c redirect stdin stdout

在Stevens的UNIX网络编程中,他提到重定向stdin,stdout和stderr,这在设置守护进程时是必需的.他用以下C代码完成它

/* redirect stdin, stdout, and stderr to /dev/null */
open("/dev/null", O_RDONLY);
open("/dev/null", O_RDWR);
open("/dev/null", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

我很困惑这三个'知道'他们是如何重定向三个标准*.特别是因为最后两个命令是相同的.有人可以解释或指出我正确的方向吗?

R..*_*R.. 15

据推测,当执行此代码时,文件描述符0,1和2已经被关闭,并且没有其他线程可能正在分配新的文件描述符.在这种情况下,由于open需要始终分配最低可用文件描述符编号,因此这三个打开调用将生成文件描述符0,1和2,除非它们失败.


pax*_*blo 5

这是因为文件描述符 0、1 和 2 分别是输入、输出和错误,并且 open 将获取第一个可用的文件描述符。请注意,这仅在文件描述符 0、1 和 2 尚未使用时才有效。

您应该小心使用的术语 、stdinstdout实际上stderr是文件句柄 ( FILE*) 而不是文件描述符,尽管它们与文件描述符之间存在相关性。