校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > fcntl函數(shù)的說明與實(shí)例 (文件加鎖)

fcntl函數(shù)的說明與實(shí)例 (文件加鎖)

熱門標(biāo)簽:新鄭電銷外呼系統(tǒng)線路 樺甸電銷機(jī)器人 地球地圖標(biāo)注方法 怎樣給景區(qū)加百度地圖標(biāo)注 河北語音電銷機(jī)器人 電話機(jī)器人哪里有賣的 河南智能電話機(jī)器人公司 壽光百度地圖標(biāo)注中心網(wǎng)站 商戶地圖標(biāo)注

對文件加鎖是原子性的,可以用于進(jìn)程間文件操作的同步。在linux下,有三個函數(shù)可以對文件進(jìn)程加鎖,分別是fcntl、flock、lockf。這里只說fcntl,它的用法也是最復(fù)雜的。

fcntl是file control的縮寫。在linux下大部分設(shè)備都是文件,所以fcntl的功能也比較多,包括:

•Duplicating a file descriptor(復(fù)制文件描述符)
•File descriptor flags(操作close-on-exec標(biāo)志)
•File status flags(操作文件O_RDONLY , O_WRONLY , O_RDWR , O_APPEND , O_NONBLOCK , O_SYNC和O_ASYNC標(biāo)識)
•Advisory locking(建議性鎖)
•Mandatory locking(強(qiáng)制性鎖)
•Managing signals(管理信號)
•Leases(租借鎖)
•File and directory change notification (dnotify)(文件和目錄更改消息)
•Changing the capacity of a pipe(改變管道大小)

這里只說一下Advisory locking和Mandatory locking。建議性鎖是指給文件上鎖后,只在文件上設(shè)置了一個鎖的標(biāo)識。其他進(jìn)程在對這個文件進(jìn)程操作時,可以檢測到鎖的存在,但這個鎖并不能阻止它對這個文件進(jìn)行操作。這就好比紅綠燈,當(dāng)亮紅燈時,告訴你不要過馬路,但如果你一定要過,也攔不住你。強(qiáng)制性鎖則是當(dāng)給文件上鎖后,當(dāng)其他進(jìn)程要對這個文件進(jìn)程不兼容的操作(如上了讀鎖,另一個進(jìn)程要寫),則系統(tǒng)內(nèi)核將阻塞后來的進(jìn)程直到第一個進(jìn)程將鎖解開。在該功能下,fcntl的函數(shù)原型為:


復(fù)制代碼
代碼如下:

#include unistd.h>
#include fcntl.h>/p> p>int fcntl(int fd, int cmd,struct flock *plock );/p> p>struct flock {
...
short l_type; /* Type of lock: F_RDLCK,
F_WRLCK, F_UNLCK */
short l_whence; /* How to interpret l_start:
SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Starting offset for lock */
off_t l_len; /* Number of bytes to lock */
pid_t l_pid; /* PID of process blocking our lock
(F_GETLK only) */
...
};

Advisory locking共有三個操作,分別是F_GETLK、F_SETLK、F_SETLKW。其中F_GETLK用來測試鎖,注意是測試而不是獲取鎖;F_SETLK用來加鎖、解鎖;F_SETLKW功能同F(xiàn)_SETLK,只是操作變成阻塞式的。而fcntl可以用過l_whence、l_start、l_len來控制文件上鎖的區(qū)間。下面分別是上鎖、測試鎖的代碼。


復(fù)制代碼
代碼如下:

/* slock.c *//p> p>#include unistd.h>
#include fcntl.h>
#include sys/types.h>
#include sys/stat.h>/p> p>int main()
{
struct flock _lock;/p> p> _lock.l_type = F_WRLCK;
_lock.l_whence = SEEK_SET;
_lock.l_start = 0;
_lock.l_len = 0;/p> p> int fd = open( "/dev/shm/test",O_CREAT|O_RDWR,S_IRWXU|S_IRGRP|S_IWGRP|S_IRWXO );
if ( fd 0 )
{
puts( "open error" );
return 0;
}/p> p> int ret = fcntl( fd,F_SETLK,_lock );
if ( ret 0 )
{
puts( "fcntl error" );
close( fd );
return 0;
}/p> p> puts( "sleep now ..." );
sleep( 100 );
puts( "exit..." );

_lock.l_type = F_UNLCK;
_lock.l_whence = SEEK_SET;
_lock.l_start = 0;
_lock.l_len = 0;/p> p> ret = fcntl( fd,F_SETLK,_lock );
if ( ret 0 )
{
puts( "unlock error" );
}/p> p> close( fd );
}


復(fù)制代碼
代碼如下:

/* glock.c *//p> p>#include unistd.h>
#include fcntl.h>
#include sys/types.h>
#include sys/stat.h>
#include stdio.h>/p> p>int main()
{
struct flock _lock;/p> p> _lock.l_type = F_RDLCK;
_lock.l_whence = SEEK_SET;
_lock.l_start = 0;
_lock.l_len = 0;/p> p> int fd = open( "/dev/shm/test",O_RDWR );
if ( fd 0 )
{
perror( "open error" );
return 0;
}/p> p> int ret = fcntl( fd,F_GETLK,_lock );
if ( ret 0 )
{
perror( "fcntl error:" );
close( fd );
return 0;
}/p> p> printf( "lock is %d\n",_lock.l_type );/p> p> close( fd );
}

在上面的代碼中,"_lock.l_type =  F_RDLCK;"表示給文件上讀共享鎖,"_lock.l_whence = SEEK_SET;"表示從文件開頭開始加鎖,"_lock.l_start = 0;"表示偏移l_whence多少字節(jié)開始加鎖,"_lock.l_len = 0;"表示加鎖的字節(jié)數(shù),即長度(Specifying 0  for  l_len  has  the  special meaning:  lock all bytes starting at the location specified by l_whence and l_start through to the end of file, no matter how  large  the  file grows.)。

在上面的代碼中,分別編譯為slock、glock。先運(yùn)行slock再運(yùn)行g(shù)lock:


復(fù)制代碼
代碼如下:

./slock
sleep now ...
./glock
lock is 1
exit...

slock先給文件上寫鎖,然后glock測試讀共享鎖是否能加上,測試結(jié)果是已存在一個寫鎖(F_WRLCK,debian下定義為1)。這里需要注意的是F_GETLK是測試鎖是否能加上,如果可以,則struct flock中的l_type為F_UNLCK;如果不行,則l_type為文件當(dāng)前鎖的類型,而l_pid為上鎖的進(jìn)程pid。故如果slock上的鎖是F_RDLCK,glock測試的鎖也是F_RDLCK,這兩個鎖是兼容的,返回的l_type類型為F_UNLCK。即你不能通過F_GETLK來判斷文件是否上鎖,只能測試某個鎖是否能加上。

  上面的是建議性鎖,如果要實(shí)現(xiàn)強(qiáng)制性鎖,則:


復(fù)制代碼
代碼如下:

To make use of mandatory locks, mandatory locking must be enabled both on the filesystem that contains the file to be locked, and on the file itself. Mandatory locking is enabled on a filesystem using the "-o
    mand" option to mount(8), or the MS_MANDLOCK flag for mount(2). Mandatory locking is enabled on a file by disabling group execute permission
on the file and enabling the set-group-ID permission bit (see chmod(1) and chmod(2)).

這是說,要實(shí)現(xiàn)強(qiáng)制性鎖則須將文件所在的文件系統(tǒng)用"-o mand"參數(shù)來掛載,并且使用chmod函數(shù)將文件用戶組的x權(quán)限去掉。然后用上面同樣的代碼就可以了。我第一次見這么奇特的函數(shù),實(shí)現(xiàn)一個功能并不是通過本身的參數(shù)控制,而是系統(tǒng)設(shè)置.....幸好我也不用強(qiáng)制性鎖。

  以上是fcntl加文件鎖的簡單例子。需要注意的是不同系統(tǒng)的實(shí)現(xiàn)并不一樣,宏定義也不一樣。如:

http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/sys/fcntl.h

 /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
#define    F_RDLCK        1        /* shared or read lock */
#define    F_UNLCK        2        /* unlock */
#define    F_WRLCK        3        /* exclusive or write lock */

 

而在debian中,/usr/include/bits/fcntl.h
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
#define F_RDLCK         0       /* Read lock.  */
#define F_WRLCK         1       /* Write lock.  */
#define F_UNLCK         2       /* Remove lock.  */

標(biāo)簽:來賓 阜陽 迪慶 淄博 楚雄 遼陽 荊州 忻州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《fcntl函數(shù)的說明與實(shí)例 (文件加鎖)》,本文關(guān)鍵詞  fcntl,函數(shù),的,說明,與,實(shí)例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《fcntl函數(shù)的說明與實(shí)例 (文件加鎖)》相關(guān)的同類信息!
  • 本頁收集關(guān)于fcntl函數(shù)的說明與實(shí)例 (文件加鎖)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产丝袜欧美中文另类| 免费在线观看视频一区| 免费精品99久久国产综合精品| 色噜噜狠狠成人中文综合| 亚洲精品乱码久久久久久久久| 日本一区二区免费在线| 色综合久久88色综合天天| 午夜精品福利视频网站| 99麻豆久久久国产精品免费 | 色偷偷久久一区二区三区| 日韩理论在线观看| 精品sm在线观看| 欧美精品久久一区| 极品瑜伽女神91| 亚洲欧洲精品成人久久奇米网| 九九精品视频在线看| 337p粉嫩大胆色噜噜噜噜亚洲| 久久99国产精品久久99果冻传媒| 亚洲精品成人天堂一二三| 欧美日韩国产美女| 高清国产一区二区三区| 亚洲午夜电影在线观看| 久久精品人人做| 欧美探花视频资源| 国产69精品久久99不卡| 性做久久久久久久久| 国产精品久久一级| 久久这里都是精品| 欧美日韩1区2区| 97精品国产露脸对白| 美女性感视频久久| 一区二区三区四区五区视频在线观看| 欧美xxxxx牲另类人与| 欧美色图在线观看| 91麻豆国产香蕉久久精品| 国产凹凸在线观看一区二区| 蜜臀国产一区二区三区在线播放| 亚洲欧洲日产国产综合网| 国产亚洲欧美中文| 精品裸体舞一区二区三区| 欧美日韩一级二级三级| 日本韩国视频一区二区| 色综合久久综合网欧美综合网 | 亚洲精品乱码久久久久久日本蜜臀| 久久新电视剧免费观看| 欧美第一区第二区| 日韩一区二区在线看片| 51午夜精品国产| 欧美日韩五月天| 欧美日韩美少妇 | 欧美午夜精品久久久| 91麻豆精品在线观看| 国产精品88888| 激情综合色丁香一区二区| 美腿丝袜一区二区三区| 美女被吸乳得到大胸91| 秋霞av亚洲一区二区三| 久久精品国内一区二区三区| 麻豆91在线播放免费| 蜜芽一区二区三区| 狠狠色丁香婷婷综合| 高清shemale亚洲人妖| 成人综合婷婷国产精品久久| fc2成人免费人成在线观看播放| 成人av影视在线观看| 在线观看三级视频欧美| 欧美另类z0zxhd电影| 精品免费视频一区二区| 国产午夜精品一区二区三区嫩草 | 91精品国产综合久久香蕉的特点| 欧美一区二区三区视频在线| 日韩欧美一区中文| 欧美极品另类videosde| 亚洲人亚洲人成电影网站色| 亚洲www啪成人一区二区麻豆| 琪琪久久久久日韩精品| 成人蜜臀av电影| 欧美少妇一区二区| 久久免费美女视频| 一区二区三区精品在线| 蜜臀精品一区二区三区在线观看 | 日韩欧美综合在线| 国产精品色眯眯| 亚洲综合精品自拍| 韩国成人福利片在线播放| 97精品久久久久中文字幕| 欧美一区二区啪啪| 国产精品短视频| 日本成人在线不卡视频| eeuss影院一区二区三区 | 日韩精品最新网址| 玉米视频成人免费看| 久久精品国产亚洲5555| 日本高清视频一区二区| 久久久精品国产免费观看同学| 一区二区三区高清在线| 国产成a人亚洲| 日韩美女一区二区三区四区| 国产精品剧情在线亚洲| 国产在线麻豆精品观看| 欧美人牲a欧美精品| 亚洲欧洲综合另类在线| 粉嫩在线一区二区三区视频| 91精品一区二区三区在线观看| **性色生活片久久毛片| 国产一区二区精品久久99| 4438亚洲最大| 亚洲午夜久久久久久久久久久| 成人黄色777网| 久久尤物电影视频在线观看| 日韩电影在线免费看| 欧美性受xxxx| 亚洲精品国产高清久久伦理二区| 国产精品一区二区你懂的| 日韩一区二区免费电影| 亚洲一区二区三区四区在线| 色婷婷久久久亚洲一区二区三区| 久久久99精品免费观看不卡| 久久99精品久久久久久久久久久久 | 亚洲嫩草精品久久| www.综合网.com| 国产校园另类小说区| 国产成人亚洲精品青草天美| 精品日韩99亚洲| 国产综合色精品一区二区三区| 日韩欧美国产麻豆| 精东粉嫩av免费一区二区三区| 欧美videos大乳护士334| 美国毛片一区二区三区| 精品区一区二区| 国产91色综合久久免费分享| 久久久久国产一区二区三区四区| 国内成+人亚洲+欧美+综合在线 | 精品伊人久久久久7777人| 日韩欧美亚洲另类制服综合在线| 午夜一区二区三区在线观看| 欧美视频精品在线| 蜜臀av性久久久久蜜臀aⅴ| 欧美一级专区免费大片| 精品在线播放午夜| 国产精品你懂的在线欣赏| 91免费在线视频观看| 亚洲h精品动漫在线观看| 91麻豆精品国产| 国产高清久久久久| 亚洲男人天堂一区| 欧美日韩国产大片| 黄网站免费久久| 中文字幕日韩一区二区| 欧美伊人久久久久久久久影院| 日韩专区中文字幕一区二区| 日韩视频免费直播| 成人一区二区三区在线观看| 亚洲少妇屁股交4| 日韩欧美一区二区视频| 国产福利一区在线| 亚洲第一综合色| 久久欧美中文字幕| 欧美日韩一区二区三区高清| 精品一二三四区| 国产精品久久久久7777按摩 | 91国产免费观看| 日韩国产在线一| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美精品日日鲁夜夜添| 精品无码三级在线观看视频| 自拍偷在线精品自拍偷无码专区| 精品污污网站免费看| 国产成人免费视频网站 | 日日欢夜夜爽一区| 国产精品色婷婷久久58| 日韩一区二区免费在线观看| 91在线视频观看| 国产一区二区三区黄视频| 亚洲一区av在线| 欧美国产乱子伦| 日韩三级av在线播放| 欧美午夜影院一区| 成人免费高清在线| 国产一区二区免费在线| 日本亚洲欧美天堂免费| 亚洲日本在线a| 国产精品久久久久久久久免费桃花| 欧美电影免费观看高清完整版 | 欧美丝袜丝交足nylons| 国产成人日日夜夜| 麻豆一区二区三区| 日日夜夜免费精品| 亚洲男人电影天堂| 国产精品福利在线播放| 国产精品久久久久久久久果冻传媒| 欧美电视剧在线观看完整版| 一区二区三区欧美日韩| 色综合网站在线| 国产一区二区主播在线| 日韩一区精品字幕| 亚洲影视在线播放| 亚洲精品中文字幕乱码三区 | 日韩精品色哟哟| 亚洲va国产va欧美va观看|