linuxC多程序通訊 檔案鎖

2021-09-26 16:28:19 字數 1911 閱讀 4961

•英文名:file lock,在同一時刻只允許乙個程序對檔案進行訪問

•建議性鎖:advisory locking,又稱協同鎖

–核心只提供加減鎖以及檢測是否加鎖,不提供鎖的控制與協調工作

–需要多程序相互檢測確認的加鎖機制

–a程序對乙個操作的檔案加了鎖

–b程序同樣可以對該檔案進行讀寫操作

–只有當b程序也對該檔案加鎖,檔案鎖才能起到同步作用

–linux一般使用建議鎖,而windows一般使用強制性鎖

•強制性鎖: mandatory locking

–程序對檔案進行i/o操作是,核心內部會檢測該檔案是否被加鎖

–a程序對乙個操作的檔案加了鎖

–當b程序對該檔案進行i/o操作時,核心若檢測該檔案加了強制鎖,b程序的操作則會失敗

•函式原型:int flock (int fd, int operation);

•函式功能:給整個檔案新增或解除乙個建議鎖

•函式引數:operation

–lock_sh:共享鎖

–lock_ex:獨佔鎖、排他鎖

–lock_un:移除鎖

•tips

–flock只提供加鎖、解鎖機制,不提供鎖檢查

–需要使用者自己檢測,達到多程序同步操作

–使用者若不自己檢測,同樣可以對乙個已經加鎖的檔案進行讀寫操作

•函式原型: int fcntl (int fd, int cmd, … /* arg */ );

•函式功能:給檔案(部分檔案)進行加鎖、解鎖操作

•函式引數:cmd

–f_setlk:非阻塞式申請鎖

–f_setlkw:阻塞式申請鎖

–f_getlk:獲取鎖的相關資訊

•記錄鎖

–讀鎖f_rdlck,寫鎖f_wrlck,釋放鎖f_unlck

•函式原型:int lockf (int fd, int cmd, off_t len);

•函式功能:

–可以更細粒度地對檔案進行加鎖、解鎖操作

–庫函式lockf是對系統呼叫fcntl的封裝

•函式引數:operation

–f_lock:對檔案某一區域新增獨佔鎖

–f_tlock:非阻塞式申請鎖

–f_ulock:對檔案某一區域解鎖

#include #include #include #include #include #include #include #include int main (void)

else

return 0;

}

#include #include #include #include #include int main (int argc, char *ar**)

static struct flock lock;

lock.l_type = f_wrlck;

lock.l_start = 0;

lock.l_whence = seek_set;

lock.l_len = 0;

lock.l_pid = getpid();

printf ("trying lock %s ...\n", ar**[1]);

int ret = fcntl (fd, f_setlkw, &lock);

if (ret == 0)

}return 0;

}

flock 和lockf 可以共同加鎖,互不影響

#include #include #include #include int main (int argc, char *ar**)

程序間通訊 檔案鎖

int flock int fd,int operation 其中,引數 fd 表示檔案描述符 引數 operation 指定要進行的鎖操作,該引數的取值有如下幾種 lock sh,lock ex,lock un 和 lock mand 通常情況下,如果加鎖請求不能被立即滿足,那麼系統呼叫 floc...

Linux C 多程序檔案操作之檔案鎖

flock函式可以鎖定檔案,避免多個程序對同個檔案進行操作時出現資料出錯。flock的用法是在開啟檔案後對檔案讀寫前呼叫flock函式上鎖,檔案操作完後flock解鎖,但需注意另乙個程序操作同個檔案時必須自己去檢查檔案是否已上鎖,即在讀寫檔案前呼叫flock函式即可進行判斷,如果上鎖,該程序則會阻塞...

linuxC多程序通訊systemv 共享記憶體

共享記憶體通訊限制 舉例 獲取共享記憶體物件的id int shmget key t key,size t size,int shm 對映共享記憶體 void shmat int shmid,const void shmaddr,int shm 解除記憶體對映 int shmdt const voi...