1、什麼事守護程序
守護程序,也就是通常說的Daemon(精靈)是Linux中的一種服務程序。它的特點是:
不占用控制終端(背景運作)
獨立于控制終端(有沒有對應的tty使用指令ps -aux檢視)
周期性運作
例如:smbd
注意l:在運作可執行程式的時候,後面加上&,意為背景運作。
2、守護程序設計要素
2.1背景運作
守護程序需要獨立于任何一個控制終端。實作方法調用是通過建立子程序來充當守護程序,而父程序退出,這樣子程序就可以在背景運作。
pid=fork();
if(pid>0)
exit(0);//父程序退出
else if(pid==0)
{
//守護程序
}

這個程式不獨立于控制終端的。
2.2 獨立于控制終端
守護程序不能占用控制終端,是以需要在背景運作。實作方法是調用setsid()函數。
else if(pid==0)//守護程序
setsid();
。。。。。
2.3 擺脫父程序的影響:
1、修改工作目錄;
程序活動時,其工作目錄所在的檔案系統不能解除安裝。例如:我們是從/mnt/usb目錄下啟動該守護程序的,那麼如果守護程序的工作目錄就是/mnt/usb,我們就無法再守護程序還運作的情況下umount /mnt/usb。是以一般需要将守護的工作目錄切換到根目錄。使用chdir("/");
2、重設檔案權限掩碼;
檔案權限掩碼是指屏蔽掉檔案權限中的對應位。比如掩碼是500,它就屏蔽了檔案建立者的可讀與可執行權限。由于子程序要繼承父程序的檔案權限掩碼,這勢必影響子程序中新建立的檔案的通路權限,為避免該影響,就需要重新對子程序中的權限掩碼清零。通常的使用方法為函數:umask(0);
3、關閉檔案描述符;
同檔案權限碼一樣,子程序還會從父程序那裡繼承一些已經打開了的檔案。這些被打開的檔案可能永遠不會被守護程序讀寫,但他們一樣消耗系統資源,而且會導緻檔案所在的檔案系統無法解除安裝。是以在子程序中需要将這些檔案關閉。
for(i=0;i<MAXFILE;i++)
close(i);
本守護程序的作用是不斷往/tmp/daemon.log中寫入内容
修改:flag初始化為1.