close(0),close(1),close(2),什么区别啊?怎么可以连续调用啊!

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:22:52
if (daemonize)
{
if (fork() != 0)
exit(0);

/* close(0); */
close(1);
close(2);
setsid();
}
这是怎么用的,看不懂?望大侠帮忙,下辈子,做MM嫁给你,就当报答了!

同文件权限码一样,用fork函数新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读写,但它们一样消耗系统资源,而且可能导致所在的文件系统无法卸下。
在上面的第二步之后,守护进程已经与所属的控制终端失去了联系。因此从终端输入的字符不可能达到守护进程,守护进程中用常规方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2 的3个文件(常说的输入、输出和报错)已经失去了存在的价值,也应被关闭。通常按如下方式关闭文件描述符:
===============================
for(i=0;i<MAXFILE;i++)
close(i);
===============================