红联Linux门户
Linux帮助

守护进程打开/dev/null使其具有文件描述符0、1、2的问题

发布时间:2009-03-23 11:03:32来源:红联作者:linux66
在Unix高级编程第13章《守护进程》(书343-344页)中提到过,可以用如下的方法使得守护进程打开/dev/null,使其具有文件描述符0、1、2。
fd0=open("/dev/null",O_RDWR);
fd1=dup(0);
fd2=dup(0);

同时书的第3章又说过:

文件描述符0、1、2由shell打开。网上的资料也说:从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,1与进程的标准输出相关联,2与进程的标准错误输出相关联。

由open返回的文件描述符一定是最小的未用描述符数值(书49页)

=================================
那么既然open返回的文件描述符一定是最小的未用描述符数值,同时进程在打开的时候,已经存在了0、1、2描述符,那么当调用“fd0=open("/dev/null",O_RDWR);”的时候,打开的应该至少是文件描述符3呀,为什么是文件描述符0呢?这个地方没有弄明白。
文章评论

共有 2 条评论

  1. qq274255093 于 2009-04-10 22:11:53发表:

    现在知道了,关于fd0,fd1,fd2就是将0,1,2给重定向了,为什么这么说,是因为,你在上面已经
    将所有的descriptor给关闭了:for (i = 0; i < rl.rlim_max; i++) close(i);
    那么你这次打开文件的时候,会默认的从0开始分配descriptor

  2. qq274255093 于 2009-04-10 20:48:45发表:

    我也正在纳闷呢,高人解答下吧