1.
constint 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 boolcheck_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...