cd /var/log
error warning 分界点。
#include <stdio.h>
#include<stdlib.h>
//其他的头文件
#define FNAME "/tmp/out"
static int daemonize(void)
{
int fd;
pid=fork();
if(pid<0)
{
//perror("fork()");
return -1;
}
if(pid>0)
{
exit(0); //父进程正常结束
}
//铺垫性的工作,将来需要脱离控制终端,012三个文件描述符没有必要关联设备。
fd=open("/dev/null",O_RDWR);
if(fd<0)
{
//perror("open()");
return -1;
}
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
if(fd>2)
close(fd);
//父进程变成1号Init
setsid(); //最主要的目的。子进程调用
chdir("/");
//umask(0);
return 0;
}
int main()
{
FILE *fp;
openlog("mydaemon",LOG_PID,LOG_DAEMON); //无返回值
if(daemonize())
{
syslog(LOG_ERR,"daemonize() failed!"); //不加\n,统一由另一个服务控制
exit(1);
}
else
{
syslog(LOG_INFO,"daemonize() suceessed!")
}
fp=fopen(FNAME,"w");
if(fp ==NULL)
{
//perror("fopen()");
syslog(LOG_ERR,"fopen:()%s",strerror(errno));//printf
exit(1);
}
syslog(LOG_INFO,"%s was opened,"FNAME);
for(i=0; ; i++)
{
fprintf(fp,"%d\n",i);
fflush(fp); //行缓冲,而文件全缓冲模式
syslog(LOG_DEBUG,"%d is printed.",i);
sleep(1);
}
fclose(fp);
closelog();
exit(0);
}
- 配置文件规定了写什么级别以上的内容,一般debug排除在外。