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在載入檔案時,在另乙個終端上向這個檔...