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排除在外。