在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呢?这个地方没有弄明白。


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
qq274255093 于 2009-04-10 20:48:45发表:
我也正在纳闷呢,高人解答下吧