1 守護程序的概述
2 編寫守護程序
(1)fork()建立子程序,exit()使父程序退出
(2)setsid()建立新會話
(3)chdir(“/”)設定工作目錄
(4)umask(0)重設檔案權限掩碼
(5)close()關閉檔案描述符
3 執行個體
按照以上步驟建立守護程序,然後讓該程序每隔10s向日志檔案/tmp/dameon.log寫入一句話
//守護程序
/*daemon.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
char *buf="this is a daemon\n";
pid_t pid;
int i;
int fd;
/*fork()建立子程序*/
pid=fork();
if(pid < )
{
printf("error fork\n");
exit();
}
else if(pid > )
{
exit(); //父程序退出
}
/*setsid()函數建立會話*/
/*調用setsid()函數有三個作用
1 讓程序擺脫原會話的控制
2 讓程序擺脫原程序組的控制
3 讓程序擺脫原控制終端的控制
******************************/
setsid();
/*chdir()設定工作目錄*/
chdir("/");
/*重設定檔案權限掩碼*/
umask();
/*關閉檔案描述符*/
/*getdtablesize()函數傳回所在程序的檔案描述附表的項數,
即該程序打開的檔案數目*/
for(i=;i<getdtablesize();i++)
{
close(i);
}
/*這時建立守護程序完畢,下面正式進入守護程序工作*/
while()
{
if( (fd=open("/tmp/daemon.log",O_CREAT|O_WRONLY|O_APPEND,)) < )
{
printf("open file error\n");
exit();
}
write(fd,buf,strlen(buf)+);
close(fd);
sleep();
}
}
運作結果