Linux保證執行乙個例項

2022-02-26 14:42:10 字數 1649 閱讀 7391

1.

const

int path_max = 1024; //

預設最大路徑長度

inline std::string

current_exe_name()

;

int ret = readlink("

/proc/self/exe

", buf, path_max);

if (ret < 0 || ret >=path_max)

std::

string

path(buf);

std::size_t pos = path.find_last_of("/"

);

if (pos == std::string

::npos)

path = path.substr(pos + 1, path.size() - 1

);

return

path;

}inline

bool

check_single_instance()

//將該檔案鎖定

//鎖定後的檔案將不能夠再次鎖定

struct

flock fl;

fl.l_type = f_wrlck; //

寫檔案鎖定

fl.l_start = 0

; fl.l_whence =seek_set;

fl.l_len = 0

;

int ret = fcntl(fd, f_setlk, &fl);

if (ret < 0

) }

//鎖定檔案後,將該程序的pid寫入檔案

char buf[16] = ;

sprintf(buf, "%d

", getpid());

ftruncate(fd, 0);

ret =write(fd, buf, strlen(buf));

if (ret < 0

)

//函式返回時不需要呼叫close(fd)

//不然檔案鎖將失效

//程式退出後kernel會自動close

return

true

;}

inline bool

check_single_instance()

//將該檔案鎖定

//鎖定後的檔案將不能夠再次鎖定

int ret = lockf(fd, f_tlock, 0

);

if (ret < 0

) }

//鎖定檔案後,將該程序的pid寫入檔案

char buf[16] = ;

sprintf(buf, "%d

", getpid());

ftruncate(fd, 0);

ret =write(fd, buf, strlen(buf));

if (ret < 0

)

//函式返回時不需要呼叫close(fd)

//不然檔案鎖將失效

//程式退出後kernel會自動close

return

true

;}

保證應用程式只有乙個例項在執行

要實現這樣的功能,方法灰常多,利用命名的事件物件,命名的互斥物件都可以實現,下面寫出這兩種方法的實現 1.命名的互斥物件 void main handle hthread1 handle hthread2 建立互斥物件 hmutex createmutex null,true,tickets if ...

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

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

保證乙個類僅有乙個例項 單例模式

場景 微軟的windows xp作業系統,ctrl alt del鍵都會彈出乙個windows任務管理器 這時不關閉這個任務管理器 繼續ctrl alt del鍵還是乙個windows任務管理器。鑑於本人水平有限,上面的場景舉例可能不合適,但是很接近乙個基本的設計模式 單例模式。code is ch...