close

Daemon應用於Linux嵌入式系統實作

Daemon(或是service)對有玩linux的同好應該是耳熟能詳的東西,Daemon大陸翻譯為守護進程,而我在台灣找網站沒有找到什麼特別的翻譯,在Devin Watson先生的Linux Daemon Writing HOWTO中,有做詳細的入門簡介及一個範例,我透過這個範例將目前專案的幾個程序做了一個小改變,如此可以達到常駐於系統背景的功能,以下是我的一個程式片段,可供各位參考應用。

int main(void)

{

        char message[20];

 

        // Process ID and Session ID

        pid_t pid, sid;

 

        // Fork off the parent process.

        pid = fork();

        if (pid < 0) {

                exit(EXIT_FAILURE);

        }

 

        // If we got a good pid, then we

        // can exit the parent process.

        if(pid > 0) {

                exit(EXIT_SUCCESS);

        }

 

        // Change the file mode mask

        umask(0);

 

        // Open any logs here

       

        // Create a new SID for the child process.

        sid = setsid();

        if(sid < 0) {

                exit(EXIT_FAILURE);

        }

       

        // Change the working directory.

        if((chdir("/")) < 0) {

                exit(EXIT_FAILURE);

        }

       

        // Close out the standard file descriptors.

        close(STDIN_FILENO);

        close(STDOUT_FILENO);

        close(STDERR_FILENO);

 

        // Daemon-specific initialization goes here

        // Set the GPIO.

        // 這個部分是我所寫的初始化GPIO的應用程式。

        system("/usr/sbin/setgpio -il");

 

        while(1){

                // 這個部份是透過網路上找的另一個程式,

                // 如果可以透過system,去取得回應值並將之存於一個Buffer

                // 還蠻好用的。

                // Get the status.

                my_system("/usr/sbin/getgpio --status", message, 20);

                if(message[17]=='0'){

                        system("/usr/sbin/setgpio -ol");

                }

                else if(message[17]=='1'){

                        system("/usr/sbin/setgpio -oh");

                }

 

                // Sleep for 5sec.

                sleep(5);

        }

 

    return 0;

}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 frankuo 的頭像
    frankuo

    frankuo的部落格

    frankuo 發表在 痞客邦 留言(0) 人氣()