天天看點

Linux程式設計之守護程序

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();

    }
}
           

運作結果

Linux程式設計之守護程式
Linux程式設計之守護程式
Linux程式設計之守護程式

繼續閱讀