linux下守护进程编写问题

int main()
{
int i;
pid_t pid;
/*int daemonfd = -1;
daemonfd = open("/dev/null",0);
if(daemonfd < -1)
{
perror("can not redirect to /dev/null");
}
if (dup2(daemonfd, STDIN_FILENO) == -1)
{
perror("can't dup2 /dev/null to STDIN_FILENO");
}
(void) close(daemonfd);*/
if((pid = fork()) <0)
return -1;
else if(pid>0)
_exit(0);
if(setsid() <0) //创建新的会话首进程
return -1;
if((pid = fork()) <0) //会话首进程创建子进程,子进程将失去终端控制。
return -1;
else if(pid>0)
_exit(0);
//daemon_proc = 1;
if(chdir("/") == -1)
{
perror("chdir failed!\n");
}
//for(i=0;i <MAXFD;i++)
//close(i);
for(;;)
{
printf("sdsd\n");
}

return 0;
}
守护进程失去了终端怎么还能够打印出for里面的东西? 这以一个《unix网络编程》里的程序,我改过了,因为我不理解原程序上最后还要将fd[0],fd[1],fd[2]重定向的作用。fd[0],fd[1],fd[2]这3个描述符不是要依靠终端才可以起作用吗?终端都没了,重定向他们干嘛呢?

因为终端都没了所以才需要重定向

这三个描述符默认是用终端的, 终端没了之后把它们重定向到文件这样它们就仍然可用

所谓“依靠终端才起作用”那是默认情况
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-04
sdsdsdsdsdsd
相似回答