Unix環境產生單例項程序方案

2021-06-02 21:48:43 字數 1117 閱讀 9538

在一些情況下,乙個程序只能產生乙個例項來執行。unix環境,提供了檔案-記錄鎖(file- and record-locking)機制,提供了事項單例項程序的基本解決方案。

假如,乙個程序在開始執行時,生成了乙個檔案,並且,對整個檔案上鎖,並且,只有乙個這樣的寫鎖允許生成。

如果,後續的程序要試圖產生寫鎖,會導致失敗。這暗示了,前面已經有例項執行了。

下面乙個判斷是否有例項執行的方法。每個例項,都會試圖生成乙個檔案(/var/run/daemon.pid).如果檔案已經鎖上了,lockfile方法,返回失敗,判斷函式返回1,表示程序已經執行了。如果沒有例項執行,程式,清空檔案,寫入程序id,返回0.

下面為乙個實現的程式:

#include

#include

#include

#include

#include

#include

#include

#include

#define lockfile "/var/run/daemon.pid"   

#define lockmode (s_irusr|s_iwusr|s_irgrp|s_iroth)   

int already_running(void);   

int lockfile(int );   

int main(int argc,char * argv)   

else  

while(1)   

return 0;   

}   

int already_running(void)   

if(lockfile(fd) < 0)   

syslog(log_err,"can't lock %s: %s", lockfile, strerror(errno));   

exit(1);   

}   

ftruncate(fd,0);   

sprintf(buf,"%ld",(long)getpid());   

write(fd,buf,strlen(buf) + 1);   

return 0;   

}   

int lockfile(int fd)   

Unix程序環境

1.快取 a.全快取 當填滿標準i o快取後才進行實際i o操作 b.行快取 當在輸入和輸出中遇到新行符時,標準i o庫執行i o操作 2.printf返回值表示成功輸入的字元個數,返回0表示沒有輸出任何字元。unix程序環境 1.int main int a rg c,char a rg v ar...

UNIX程序環境

當執行程式時,main函式時如何被呼叫的?c程式總是從main函式開始執行。當核心在啟動c程式時,在呼叫main之前先呼叫乙個特殊的啟動例程。可執行程式將 核心取得命令列引數和環境變數,然後為呼叫main函式做好安排。程序的終止 1 正常終止 a 從main返回 b 呼叫exit c 呼叫 exit...

UNIX程序的環境

在學習程序之前,先來了解下程序的執行環境。main函式 程序總是從main函式開始執行的,我們程式設計時,程式執行也是從main函式執行的,它的原型如下 int main int argc,char argv argc是命令列引數的數目,argv是指鎮陣列,即指向指標的指標,可以寫 測試一下 inc...