Linux下多個程序或執行緒同時對乙個檔案進行寫操作

2021-07-25 23:06:41 字數 982 閱讀 7419

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...