利用檔案鎖保證乙個程式最多只有乙份拷貝在執行

2021-06-26 09:18:59 字數 887 閱讀 3968

方法:在程式每次啟動的時候都對某個檔案請求一寫鎖,如果請求成功,則表明這是執行的第乙份拷貝,程式繼續執行,否則表明程式已有其他拷貝在執行,退出。

所用到的系統呼叫:fcntl(int fd, int cmd, struct flock*);

其中struct flock用於描述所要請求的記錄鎖, 成員如下:

struct flcok

l_type; //讀鎖:f_rdlck, 寫鎖: f_wrlck, 釋放鎖:f_unlck

l_whence; //和l_start一起決定從檔案的**開始上鎖(作用和lseek函式中的offset和whence引數一樣)

l_start;

l_len; //上鎖的檔案內容長度(特例:當l_whence = seek_set, l_sart = 0, l_len = 0時,表示對整個檔案上鎖)

示例**:

#include

#include

#include

#include

int main(int argc, char **argv)

struct flock lockinfo;

lockinfo.l_type = f_wrlck;

lockinfo.l_whence = seek_set;

lockinfo.l_start = 0;

lockinfo.l_len = 0;

if (fcntl(fd, f_setlk, &lockinfo) < 0)//cmd引數使用f_setlk,當請求鎖失敗時,errno被設定為eagain或者eacces

else

}pause();

return 0;//程式退出是檔案被關閉,檔案上的鎖也被釋放

}

讓php程式同一時間最多只有乙個工作

某些命令列程式執行的時候,為了避免多程序互相干擾,需要讓它同一時間只能有乙個例項在執行。下面是我的方法 lockfile file running function lock function unlock lock register shutdown function unlock do some...

保證只有乙個當前程式在執行

setlasterror 0 handle hmutex createmutex null,false,lpcstr l 5d0e714f 8c2e 94d3 e819 92c54fdd2edc if getlasterror error already exists setlasterror 0 ...

保證乙個類只有乙個例項存在

需求 在做一些彈出視窗的時候,往往需要在新的彈出視窗被建立出來之前,要檢查是否已經有視窗存在。如果存在,則先移除已經存在的例項,然後再建立新的例項。這樣就保證了乙個類只有乙個例項存在。思路 主要就是在類中設定乙個指向自身的靜態屬性。package private function show void...