linux中fctnl檔案鎖
核心2.4.21
fctnl可以實現對檔案進行加鎖,保證多程序對同一檔案操作的正確性。
下面是乙個簡單封裝的檔案加鎖函式
int start_lock_file(int fd, int write_lock, int wait_lock)
else
slock.l_whence = seek_set;
slock.l_start = 0;
slock.l_len = 0;
if (wait_lock)
else
return fcntl(fd, cmd, &slock);
}注:可參看unix環境高階程式設計使用巨集簡化檔案加鎖呼叫
fcntl系統呼叫根據slock結構體中l_type的型別確定檔案加讀/寫鎖的型別。
巨集f_setlkw對加鎖操作進行阻塞,巨集f_setlk不對加鎖操作進行阻塞,立即返回。
對檔案進行加鎖時,加讀鎖時檔案必須以讀操作開啟;加寫鎖時檔案必須以寫操作開啟。
如果檔案用fopen開啟,可以使用fileno函式獲得fd的檔案描述符。
加鎖對同一程序中的多執行緒無效。同一程序中的多執行緒對同一檔案加鎖,後加鎖的執行緒會覆蓋前乙個執行緒加的檔案鎖。
fcntl文件中寫到,乙個程序對乙個檔案的區域只能加乙個型別的鎖。
linux中的fctnl檔案鎖
linux中fctnl檔案鎖 核心2.4.21 fctnl可以實現對檔案進行加鎖,保證多程序對同一檔案操作的正確性。下面是乙個簡單封裝的檔案加鎖函式 int start lock file int fd,int write lock,int wait lock else slock.l whence...
inux中socketaddr in的結構解析
struct sockaddr,該型別是用來儲存socket資訊的 struct sockaddr sa family一般為af inet sa data則包含該socket的ip位址和埠號。另外還有一種結構型別 struct sockaddr in sin zero 它用來將sockaddr in...
linux 中的檔案鎖
linux執行多個程序同時對一檔案進行讀寫,雖然每乙個read和write都是原子操作,但核心並沒有在兩個讀寫操作之間加以同步。因此,當乙個程序多次呼叫read讀檔案時,就有可能在某兩次讀之間被另一程序所寫,因此,讀的的值將發生錯誤,造成了檔案資料的隨機性衝突,為解決此類併發程序對共享檔案的訪問控制...