下面是memcached中初始化一个daemo的代码,如果我们自己要写daemo的话,这个可以参考:
1. fork时使用了switch结构,而不是if … else
2. 提供了一个参数,决定是否重定向标准输入、标准输出、标准错误
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int daemon(int nochdir, int noclose)
{
int fd;
switch (fork()) {
case –1:
return (-1);
case 0:
break;
default:
_exit(EXIT_SUCCESS);
}
if (setsid() == –1)
return (-1);
if (nochdir == 0)
(void)chdir("/");
if (noclose == 0 && (fd = open("/dev/null", O_RDWR, 0)) != –1) {
(void)dup2(fd, STDIN_FILENO);
(void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO)
(void)close(fd);
}
return (0);
}