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

时间:2010-11-24 03:17:45

标签: c redirect stdout stdin

在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);

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

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:4)

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

您应该注意使用的术语,stdinstdoutstderr实际上是文件句柄(FILE*)而不是文件描述符,尽管有一个这些与文件描述符之间的相关性。

相关问题