【发布时间】:2016-12-02 16:20:46
【问题描述】:
我正在尝试在 c 中创建一个 linux 守护程序,并找到了一些 sample code on this page。
除了尝试将 STDIN、STDOUT 和 STDERR 重定向(到 /dev/null/)的位置之外,我了解所有代码。我还在这里发现了一些与为什么这些应该被重定向(我理解)相关的问题。
我的问题涉及的具体代码部分是:
/* Route I/O connections */
/* Open STDIN */
i = open("/dev/null", O_RDWR);
/* STDOUT */
dup(i);
/* STDERR */
dup(i);
读取man page for dup() 意味着dup() 只是复制了一个文件描述符。
所以我不明白这是如何重定向的?编译器是从上面一行中的 cmets 中获取提示吗?还是缺少一些代码?是完全错误吗?还是我错过了什么?
【问题讨论】:
-
该示例是否在创建新的 STDIN、STDOUT 和 STDERR 之前关闭了现有的 STDIN、STDOUT 和 STDERR?这样下一个要使用的空闲 fd 将是 0,然后是 1,然后是 2