程序間通訊 檔案鎖

2021-08-11 07:50:00 字數 2515 閱讀 7676

int flock(int fd, int operation);
其中,引數 fd 表示檔案描述符;引數 operation 指定要進行的鎖操作,該引數的取值有如下幾種:lock_sh, lock_ex, lock_un 和 lock_mand

通常情況下,如果加鎖請求不能被立即滿足,那麼系統呼叫 flock() 會阻塞當前程序。比如,程序想要請求乙個排他鎖,但此時,已經由其他程序獲取了這個鎖,那麼該程序將會被阻塞。如果想要在沒有獲得這個排他鎖的情況下不阻 塞該程序,可以將 lock_nb 和 lock_sh 或者 lock_ex 聯合使用,那麼系統就不會阻塞該程序。flock() 所加的鎖會對整個檔案起作用。

int fcntl (int fd, int cmd, struct flock *lock);
其中,引數 fd 表示檔案描述符;引數 cmd 指定要進行的鎖操作,由於 fcntl() 函式功能比較多,這裡先介紹與檔案鎖相關的三個取值 f_getlk、f_setlk 以及 f_setlkw。這三個值均與 flock 結構有關。

struct flock

;在 flock 結構中,l_type 用來指明建立的是共享鎖還是排他鎖,其取值有三種:f_rdlck(共享鎖)、f_wrlck(排他鎖)和f_unlck(刪除之前建立的 鎖);l_pid 指明了該鎖的擁有者;l_whence、l_start 和l_end 這些字段指明了程序需要對檔案的哪個區域進行加鎖,這個區域是乙個連續的位元組集合。因此,程序可以對同乙個檔案的不同部分加不同的鎖。l_whence 必須是 seek_set、seek_cur 或 seek_end 這幾個值中的乙個,它們分別對應著檔案頭、當前位置和檔案尾。l_whence 定義了相對於 l_start 的偏移量,l_start 是從檔案開始計算的。

可以執行的操作包括:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#ifndef t_desc

#define t_desc(x, y) (y)

#endif

#if t_desc("fcntl", 1)

char *flock_name1 = "

/tmp/flock1";

char *flock_name2 = "

/tmp/flock2";

intflock_fd1;

intflock_fd2;

int read_lock(int

fd)

return

result;

}int read_lock_wait(int

fd)int write_lock(int

fd)int write_lock_wait(int

fd)int file_unlock(int

fd)#endif

#if t_desc("flock", 1)

#endif

#if t_desc("tu", 1)

void thread_11(void

)

pthread_exit(

0);

}

void thread_12(void

)

pthread_exit(

0);

} void thread_21(void

)

pthread_exit(

0);

}

void thread_22(void

)

pthread_exit(

0);

} int tu1_proc(int

tu_id)

else

if(ret != 0

)

/*等待執行緒結束

*/if (tu_id == 1

) else

close(flock_fd1);

close(flock_fd2);

return

0;

} #endif

#if t_desc("global", 1)

void

usage()

int main(int argc, char **argv)

tu_id = atoi(argv[1

]);

if (tu_id < 1 || tu_id > 2

)

ret =tu1_proc(tu_id);

return

ret;

}#endif

#if t_desc("readme", 1)

/*1, how to compile

gcc -o flock.out flock.c -lpthread

*/#endif

linuxC多程序通訊 檔案鎖

英文名 file lock,在同一時刻只允許乙個程序對檔案進行訪問 建議性鎖 advisory locking,又稱協同鎖 核心只提供加減鎖以及檢測是否加鎖,不提供鎖的控制與協調工作 需要多程序相互檢測確認的加鎖機制 a程序對乙個操作的檔案加了鎖 b程序同樣可以對該檔案進行讀寫操作 只有當b程序也對...

程序間通訊 檔案對映與控制代碼繼承

程序間通訊有多種方法,其中常用的一種便是檔案對映。往往在不同專案中對檔案對映的使用策略也不一樣,這裡拿一種常遇到的情況來說明需要注意的。例如 a程序 system許可權 含有網路模組,負責與伺服器通訊,而b程序 任意使用者 負責實時收集資料,由於b程序處於任意使用者,不能確保它是否能與伺服器通訊,當...

程序間通訊 7 鎖

計算機領域中,鎖機制使用的非常多。它主要是為了避免多個程序訪問同一資源時,可能出現的資料不一致問題。例如,cat命令輸出乙個比較大的檔案內容,cat命令的特性是需要先將所有磁碟檔案資料讀取到記憶體後再輸出,所以cat輸出乙個大檔案可能需要花費一些時間。如果在cat在載入檔案時,在另乙個終端上向這個檔...