void syslog(int priority,const char * message,...);
syslog(LOG_INFO|LOG_LOCAL2,"rename(%s,%s):%m",file1,file2);
#include "unp.h" #include <syslog.h> #define MAXFD 64 extern int daemon_proc; void daemon_init(const char * pname,int facility){ int i; pid_t pid; if((pid = Fork())!=0) //調用fork,終止父進程,留下子進程繼續運行。 exit(0); setid(); //建立一個新的登錄會話session Signal(SIGHUP,SIG_IGN); //忽略SGIHUP信號並在此調用fork if((pid=Fork())!=0) //確保未來即便打開一個終端設備,也不會自動得到控制終端。 exit(0); daemon_proc = 1; //非零時,出錯處理函數將調用syslog函數取代fprintf輸出到標準錯誤輸出 chdir("/"); umask(0);//將工做目錄改到根目錄 for(i=0;i<MAXFD;i++) //關閉守護進程從運行開始打開的全部文件描述字 close(i); openlog(pname,LOG_PID,facility); }