关于Unix网络编程卷一创建守护进程

来源:互联网 发布:获取所有股票信息 js 编辑:程序博客网 时间:2024/04/30 00:19

Unix网络编程卷一13.4,创建守护进程代码如下:

#include <syslog.h>#define MAXFD 64extern int daemon_proc;//定义在其他文件/**********************************************   1.fork()*   2.setsid()*   3.signal(SIGHUP,SIG_IGN)*   4.fork()*   5.chdir("/")*   6.close(所有文件描述符)*   7.dup2()*   **********************************************/int daemon_init(const char *pname,int facility){int i;pid_t pid;if((pid=fock())<0)return -1;else if(pid)_exit(0);if(setsid()<0)return -1;signal(SIGHUP,SIG_IGN);if((pid=fork())<0)return -1;else if(pid)_exit(0);daemon_proc=1;chdir("/");for(i=0;i<MAXFD;++i)close(i);open("/dev/null",O_RDONLY);open("/dev/null",O_RDWR);open("/dev/null",O_RDWR);openlog(pname,LOG_PID,facility);return 0;}
主要解释三个open函数是怎么把stdin、stdout、stderr(描述符分别为0、1、2)重定向到/dev/null 的:

首先,通过循环,将所有文件描述符关闭,然后第一个open调用,那么返回的文件描述符肯定是0,

同理,第二个open返回1,第三个open返回2。这样,就相当于描述符0,1,2都指向/dev/null了。


另外,还有一种方法:

int fd=open("/dev/null",O_RDWR);dup2(fd,0);dup2(fd,1);dup2(fd,2);if(fd>2)  close(fd);



0 0
原创粉丝点击