您的位置:首页 > 理论基础 > 计算机网络

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

2017-04-23 20:05 246 查看
Unix网络编程卷一13.4,创建守护进程代码如下:

#include <syslog.h>
#define MAXFD 64
extern 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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: