【发布时间】:2025-12-29 11:15:15
【问题描述】:
在 Stevens 的 UNIX Network Programming 中,他提到了重定向 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);
我很困惑这三个“知道”他们如何重定向三个 std*。特别是因为最后两个命令是相同的。有人可以解释或指出正确的方向吗?
【问题讨论】:
-
Tch。这样做很危险。始终使用
dup2()。 -
如果你的进程是单线程的并且你已经关闭了旧的stdin/out/err,这并不危险。
-
这个答案可能会有所帮助:*.com/a/4973065/207753
-
请不要这样做。我知道这是一个有 5 年历史的问题,但早在 2003 年就已经指出,将标准输入、标准输出和标准错误重定向到 /dev/null 会引起很多系统管理员的头痛。 cloud9.hedgee.com./scribbles/daemon#logging