亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 進程間文件加鎖的問題 [打印本頁]

作者: xpkiller    時間: 2008-08-06 20:18
標題: 進程間文件加鎖的問題
2個進程用a和b來表示
a 讀寫文件c
b 只讀文件c
為了避免b寫文件c,所以希望a進程給文件c加鎖。

問題:我不清楚應該怎么實現,用flock,fcntl?麻煩各位大俠點一下就行,不會浪費大家太多時間。
謝謝
作者: xpkiller    時間: 2008-08-06 21:19
a和b如果是線程,加鎖方式是不是也不一樣?
作者: ivhb    時間: 2008-08-06 21:49
線程能對文件加鎖么? 好像不可以。
因為不管是flock或者fcntl也好(一般來說,flock是調用fcntl的)
加鎖只是進程級別的,線程之間,沒有辦法通過文件加鎖來互斥訪問
作者: Godbach    時間: 2008-08-06 22:47
如果是兩個獨立進程,也就是兩個程序的話,可以考慮使用flock
作者: Roemer    時間: 2008-08-07 00:43
加鎖也要B配合,B如果硬寫的話也沒辦法把~
作者: gaochang2008    時間: 2008-08-07 09:11
原帖由 ivhb 于 2008-8-6 21:49 發(fā)表
線程能對文件加鎖么? 好像不可以。
因為不管是flock或者fcntl也好(一般來說,flock是調用fcntl的)
加鎖只是進程級別的,線程之間,沒有辦法通過文件加鎖來互斥訪問


設置一個變量做標記 不就搞定了,    falg = 0 和1
作者: Godbach    時間: 2008-08-07 09:18
使用flock的話,也可以單獨建一個空文件,專門用于加鎖和解鎖。這樣還可以不影響原先操作的文件。
作者: phoenix0701    時間: 2008-08-07 11:01
原帖由 gaochang2008 于 2008-8-7 09:11 發(fā)表


設置一個變量做標記 不就搞定了,    falg = 0 和1


設置變量的話,貌似不能解決問題
檢查變量和改變變量的值這兩個操作并不是一個原子操作
作者: zhjufe    時間: 2008-08-07 16:04
標題: 回復 #8 phoenix0701 的帖子
不是原子操作在這個問題有關系嗎?
作者: phoenix0701    時間: 2008-08-07 19:41
也許等你判斷完flag,還沒來得及改flag,進程調度,然后別的進程也發(fā)現該資源可用
而且LZ說的是進程間資源的互斥訪問

[ 本帖最后由 phoenix0701 于 2008-8-7 19:51 編輯 ]
作者: lukeden    時間: 2008-08-07 20:48
如果是兩個進程的話,用fcntl()設置鎖,參考APUE 14.3:
#include <fcntl.h>

int fcntl(int filedes, int cmd, ... /* struct
flock *flockptr */ );




Returns: depends on cmd if OK (see following), 1 on error


For record locking, cmd is F_GETLK, F_SETLK, or F_SETLKW. The third argument (which we'll call flockptr) is a pointer to an flock structure.

   struct flock {
     short l_type;   /* F_RDLCK, F_WRLCK, or F_UNLCK */
     off_t l_start;  /* offset in bytes, relative to l_whence */
     short l_whence; /* SEEK_SET, SEEK_CUR, or SEEK_END */
     off_t l_len;    /* length, in bytes; 0 means lock to EOF */
     pid_t l_pid;    /* returned with F_GETLK */
   };

This structure describes

The type of lock desired: F_RDLCK (a shared read lock), F_WRLCK (an exclusive write lock), or F_UNLCK (unlocking a region)

The starting byte offset of the region being locked or unlocked (l_start and l_whence)

The size of the region in bytes (l_len)

The ID (l_pid) of the process holding the lock that can block the current process (returned by F_GETLK only)
作者: lanying_wzw    時間: 2008-08-09 21:58
用fcntl()文件鎖
作者: net_robber    時間: 2008-08-10 00:18
如果B進程是你自己寫的,那么當你不希望B進程對文件進行寫操作的時候,為什么會在B進程中加入寫文件的代碼???




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2