linux下多個程序或執行緒同時對乙個檔案進行寫操作
linux下多個程序或執行緒同時對乙個檔案進行寫操作,如何解決衝突?
使用flock(鎖定檔案或解除鎖定),簡單可行!
先介紹一下flock函式吧
標頭檔案 #include
定義函式 int flock(int fd,int operation);
函式說明 flock()會依引數operation所指定的方式對引數fd所指的檔案做各種鎖定或解除鎖定的動作。此函式只能鎖定整個檔案,無法鎖定檔案的某一區域。
引數operation有下列四種情況:
lock_sh 建立共享鎖定。多個程序可同時對同乙個檔案作共享鎖定。
lock_ex 建立互斥鎖定。乙個檔案同時只有乙個互斥鎖定。
lock_un 解除檔案鎖定狀態。
lock_nb 無法建立鎖定時,此操作可不被阻斷,馬上返回程序。通常與lock_sh或lock_ex 做or(|)組合。
單一檔案無法同時建立共享鎖定和互斥鎖定,而當使用dup()或fork()時檔案描述詞不會繼承此種鎖定。
返回值 返回0表示成功,若有錯誤則返回-1,錯誤**存於errno。
上**!
#include //flock header file
#include //ftruncate header file
file *fin;
//讀寫開啟乙個文字檔案,允許讀和寫
fin = fopen(szfile, "rt+");
if (!fin)
//建立排他鎖,阻塞方式
if ( (flock(fileno(fin), lock_ex)) < 0 )
本程式需要每次清空後重寫
ftruncate(fileno(fin), 0); //清空檔案
//寫檔案
......
//解除鎖
if ( (flock(fileno(fin), lock_un)) < 0 )
多個使用者程序同時進行
我們以三個使用者程序 str1 str2 str3 為例,來看看多個程序是如何執行的,他們又是如何切換的。程序的源 如下,str1 str2 str3三者 一樣。include int foo int n int main int argc,char argc 1 假設現在建立 fork 了三個程序...
Linux下如何同時啟動多個Tomcat伺服器
所用tomcat伺服器都為zip版,非安裝版。以兩個為例 安裝第二個tomcat完成後,到安裝目錄下的conf子目錄中開啟server.xml檔案,查詢以下三處 1 修改http訪問埠 預設為8080埠 minprocessors 5 maxprocessors 75 enablelookups t...
linux中fork同時建立多個子程序的方法(二)
fork 同時建立多個子程序方法 第一種方法 驗證通過 特點 同時建立多個子程序,每個子程序可以執行不同的任務,程式 可讀性較好,便於分析,易擴充套件為多個子程序 int main void pid t p2 fork if p2 0 int st1,st2 waitpid p1,st1,0 wai...