亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

如何使用fcntl函數

2020-02-24 14:30:07
字體:
來源:轉載
供稿:網友
fcntl函數為我們實現了文件的打開、讀寫等基本操作,也就是說用戶們可以共同使用、操作一個文件的情況,但是也有很多人不知道如何使用fcntl函數,現在我們去看看具體內容吧。
(1)fcntl函數說明
前面的這5個基本函數實現了文件的打開、讀寫等基本操作,這一節(jié)將討論的是,在文 件已經共享的情況下如何操作,也就是當多個用戶共同使用、操作一個文件的情況,這時,Linux 通常采用的方法是給文件上鎖,來避免共享的資源產生競爭的狀態(tài)。
文件鎖包括建議性鎖強制性鎖。
建議性鎖要求每個上鎖文件的進程都要檢查是否有鎖存,并且尊重已有的鎖。在一般情況下,內核和系統(tǒng)都不使用建議性鎖。強制性鎖是由內 核執(zhí)行的鎖,當一個文件被上鎖進行寫入操作的時候,內核將阻止其他任何文件對其進行讀寫操作。采用強制性鎖對性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。
在 Linux 中,實現文件上鎖的函數有l(wèi)ock和fcntl,其中flock用于對文件施加建議性鎖,而fcntl不僅可以施加建議性鎖,還可以施加強制鎖。同時,fcntl還能對文件的某一記錄進行上鎖,也就是記錄鎖。
記錄鎖又可分為讀取鎖寫入鎖,其中讀取鎖又稱為共享鎖,它能夠使多個進程都能在文件的同一部分建立讀取鎖。而寫入鎖又稱為排斥鎖,在任何時刻只能有一個進程在文件的某個部分上建立寫入鎖。當然,在文件的同一部分不能同時建立讀取鎖和寫入鎖。
注意:
fcntl是一個非常通用的函數,它還可以改變文件進程各方面的屬性,在本節(jié)中,主要介紹它建立記錄鎖的方法,關于它其他用戶感興趣的讀者可以參看fcntl手冊。
(2)fcntl函數格式
用于建立記錄鎖的fcntl函數格式如表6.6 所示。
表6.6 fcntl函數語法要點所需頭文件
?

#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
?
函數原型int fcnt1(int fd, int cmd, struct flock *lock)
fd:文件描述符
F_DUPFD:復制文件描述符
F_GETFD:獲得fd的close-on-exec標志,若標志未設置,則文件經過exec函數之后仍保持打開狀態(tài)
F_SETFD:設置close-on-exec標志,該標志以參數arg的FD_CLOEXEC位決定
F_GETFL:得到open設置的標志
函數傳入值
cmd
F_SETFL:改變open設置的標志
F_GETFK:根據lock描述,決定是否上文件鎖
F_SETFK:設置lock描述的文件鎖
F_SETLKW:這是F_SETLK的阻塞版本(命令名中的W表示等待(wait))。
如果存在其他鎖,則調用進程睡眠;如果捕捉到信號則睡眠中斷
F_GETOWN:檢索將收到SIGIO和SIGURG信號的進程號或進程組號
F_SETOWN:設置進程號或進程組號
函數返回值
Lock:結構為flock,設置記錄鎖的具體狀態(tài),后面會詳細說明
成功:0
-1:出錯
這里,lock的結構如下所示:
?

Struct flock{
short l_type;
off_t l_start;
short l_whence;
off_t l_len;
pid_t l_pid;
}
lock結構中每個變量的取值含義如表6.7 所示。
表6.7 lock結構變量取值
F_RDLCK:讀取鎖(共享鎖)
l_type F_WRLCK:寫入鎖(排斥鎖)
F_UNLCK:解鎖
l_stat 相對位移量(字節(jié))
SEEK_SET:當前位置為文件的開頭,新位置為偏移量的大小
SEEK_CUR:當前位置為文件指針的位置,新位置為當前位置加上偏移量
l_whence:相對位移量的起點(同lseek 的whence)。
SEEK_END:當前位置為文件的結尾,新位置為文件的大小加上偏移量的大小
l_len 加鎖區(qū)域的長度
小技巧:
為加鎖整個文件,通常的方法是將l_start 說明為0,l_whence 說明為SEEK_SET,l_len 說明為0。
(3)fcntl使用實例
下面首先給出了使用fcntl 函數的文件記錄鎖函數。在該函數中,首先給flock 結構體的對應位賦予相應的值。接著使用兩次fcntl函數分別用于給相關文件上鎖和判斷文件是否可以上鎖,這里用到的cmd值分別為F_SETLK 和F_GETLK。
這個函數的源代碼如下所示:
?

/*lock_set函數*/
void lock_set(int fd, int type)
{
struct flock lock;
lock.l_whence = SEEK_SET;//賦值lock結構體
lock.l_start = 0;
lock.l_len =0;
while(1){
lock.l_type = type;
/*根據不同的type值給文件上鎖或解鎖*/
if((fcntl(fd, F_SETLK, &lock)) == 0){
if( lock.l_type == F_RDLCK )
printf("read lock set by %d/n",getpid());
else if( lock.l_type == F_WRLCK )
printf("write lock set by %d/n",getpid());
else if( lock.l_type == F_UNLCK )
printf("release lock by %d/n",getpid());
return;
}
/*判斷文件是否可以上鎖*/
fcntl(fd, F_GETLK,&lock);
/*判斷文件不能上鎖的原因*/
if(lock.l_type != F_UNLCK){
/*/該文件已有寫入鎖*/
if( lock.l_type == F_RDLCK )
printf("read lock already set by %d/n",lock.l_pid);
/*該文件已有讀取鎖*/
else if( lock.l_type == F_WRLCK )
printf("write lock already set by %d/n",lock.l_pid);
getchar();
}
}
}


下面的實例是測試文件的寫入鎖,這里首先創(chuàng)建了一個hello文件,之后對其上寫入鎖,最后釋放寫入鎖。代碼如下所示:

?

?

?


/*fcntl_write.c測試文件寫入鎖主函數部分*/
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int fd;
/*首先打開文件*/
fd=open("hello",O_RDWR | O_CREAT, 0666);
if(fd < 0){
perror("open");
exit(1);
}
/*給文件上寫入鎖*/
lock_set(fd, F_WRLCK);
getchar();
/*給文件接鎖*/
lock_set(fd, F_UNLCK);
getchar();
close(fd);
exit(0);
}


為了能夠使用多個終端,更好地顯示寫入鎖的作用,本實例主要在PC 機上測試,讀者可將其交叉編譯,下載到目標板上運行。下面是在PC 機上的運行結果。為了使程序有較大的靈活性,筆者采用文件上鎖后由用戶鍵入一任意鍵使程序繼續(xù)運行。建議讀者開啟兩個終端,并且在兩個終端上同時運行該程序,以達到多個進程操作一個文件的效果。在這里,筆者首先運行終端一,請讀者注意終端二中的第一句。
終端一:

?

?

?


[root@localhost file]# ./fcntl_write
write lock set by 4994
release lock by 4994


終端二:

?

?

?


[root@localhost file]# ./fcntl_write
write lock already set by 4994
write lock set by 4997
release lock by 4997


由此可見,寫入鎖為互斥鎖,一個時刻只能有一個寫入鎖存在。
接下來的程序是測試文件的讀取鎖,原理同上面的程序一樣。

?

?

?


/*fcntl_read.c測試文件讀取鎖主函數部分*/
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int fd;
fd=open("hello",O_RDWR | O_CREAT, 0666);
if(fd < 0){
perror("open");
exit(1);
}
/*給文件上讀取鎖*/
lock_set(fd, F_RDLCK);
getchar();
/*給文件接鎖*/
lock_set(fd, F_UNLCK);
getchar();
close(fd);
exit(0);
}


同樣開啟兩個終端,并首先啟動終端一上的程序,其運行結果如下所示:
終端一:

?

?

?


[root@localhost file]# ./fcntl2
read lock set by 5009
release lock by 5009


終端二:

?

?

?


[root@localhost file]# ./fcntl2
read lock set by 5010
release lock by 5010


讀者可以將此結果與寫入鎖的運行結果相比較,可以看出,讀取鎖為共享鎖,當進程5009已設定讀取鎖后,進程5010 還可以設置讀取鎖。
思考:
如果在一個終端上運行設置讀取鎖,則在另一個終端上運行設置寫入鎖,會有什么結果呢?

以上就是如何使用fcntl函數的內容,想了解的朋友們就請關注我們愛在技術頻道哦,希望對你有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

成人av一区二区三区在线观看| 久久精品国产亚洲av无码娇色| 国产成人一级电影| 成人观看视频| 亚洲成在人线免费| jizzjizz日本护士免费| 欧美成人三级在线视频| 99re国产视频| 国产精品少妇在线视频| 波多野结衣手机在线视频| 国产无套丰满白嫩对白| 精品欧美一区二区三区在线观看| 午夜视频在线观看一区二区| 国产特级aaaaaa大片| 成人免费福利片| 欧美成人一二三| 免费91在线观看| 美女av一区二区| 中文字幕亚洲欧洲| 91丨九色丨蝌蚪富婆spa| 免费网站观看www在线观看| 97在线观看免费高清| 欧美综合激情| 深夜福利亚洲导航| 日本精品一区二区三区视频| 成人avav影音| 欧美 日韩 国产精品免费观看| 中文字幕精品一区二区三区在线| 超碰成人久久| 久久激五月天综合精品| 日韩欧美美女在线观看| 高清一区二区视频| 无码人妻精品一区二区三区温州| 欧美精品xxxxbbbb| 亚洲三级电影在线观看| 美女在线一区二区| 欧美电影在线观看一区| 欧美hdxxxx| a天堂在线观看| 久久久久久久久久成人| 视频二区在线播放| 久久草av在线| 欧美在线观看一区| 亚洲视频在线播放免费| 国产综合在线看| 一本加勒比北条麻妃| 国产三级一区| 亚洲婷婷在线| 久久伊人精品视频| 日日夜夜亚洲| 宅男网站在线免费观看| 国产一区在线免费| 久久蜜桃av一区精品变态类天堂| 中文字幕无码日韩专区免费| 手机看片福利盒子久久| 国产a视频免费观看| 国产一区二区三区黄| 91在线播放网址| 国产91中文| 国产欧美综合一区二区三区| 欧美日韩中文字幕综合视频| 国产二级c片l毛片| 菠萝蜜视频网站入口| 波多野在线观看| 韩国欧美国产一区| av免费网站在线观看| www.国产视频| 变态另类丨国产精品| 欧美伦理视频网站| 一二三在线视频社区| 中文视频一区视频二区视频三区| 亚洲四区在线观看| 偷偷看偷偷操| 亚洲精品你懂的| 精品少妇一区二区三区在线| 九一免费在线观看| 这里只有精品在线观看| 亚洲人成在线观看一区二区| 国内精品露脸在线视频播放| 婷婷综合久久中文字幕蜜桃三电影| 国产精品毛片一区二区三区四区| 亚洲一区免费| sm捆绑调教视频| 国产日产亚洲精品| 亚洲欧美国产精品久久久久久久| 久久天堂av综合合色蜜桃网| 亚洲aa在线观看| av电影不卡在线观看| 欧美欧美天天天天操| 影音先锋中文在线播放| 97电影在线| 97精品伊人久久久大香线蕉| 精品国产av 无码一区二区三区| 黄色一区二区三区| 蜜桃视频一日韩欧美专区| 懂色av蜜桃av| 日韩美女主播在线视频一区二区三区| 手机在线成人免费视频| 色哺乳xxxxhd奶水米仓惠香| 天天射天天操天天干| 麻豆成人小视频| 国产亚洲精品拍拍拍拍拍| 国产在线成人| 不卡伊人av在线播放| 在线看片黄色| 蜜桃传媒九九九| 杨幂毛片午夜性生毛片| 日本高清视频www| 日本欧美日韩| 欧美xxxx少妇| 国产女主播喷水视频在线观看| 91精品国产欧美日韩| 午夜久久久久久电影| 欧美高潮视频| 丝袜美腿av在线| luxu259在线中文字幕| 亚洲精品国产首次亮相| 欧美激情xxxx性bbbb| 青青草原一区二区| 精品一区二区视频在线观看| 国内国产区免费视频| av在线一区不卡| 高清免费电影在线观看| 成年人看的免费视频| 丁香一区二区三区| 欧美13videosex性极品| 日本亚洲一区二区三区| 欧美一级电影免费在线观看| 亚洲综合国产激情另类一区| 久久精品九色| 中国人与牲禽动交精品| 99国产精品久久一区二区三区| 日韩欧美小视频| 亚洲影视一区| 一区二区三区产品免费精品久久75| 日韩电影中文字幕在线观看| 亚洲一区二区三区爽爽爽爽爽| 好吊妞www.84com只有这里才有精品| 97视频网站入口| 欧美一区二区三区免费观看| 亚洲男人天堂2024| 欧美丰满高潮xxxx喷水动漫| 97视频网站入口| 国产精华一区| 伊人性伊人情综合网| 日本人妖一区二区| 亚洲精选国产| 欧美一区二区三区红桃小说| 亚洲图片欧美综合| 日本一级理论片在线大全| 欧美成人在线网站| 欧美深夜视频| 中文在线有码| 欧美综合在线视频| 久久精品久久精品国产大片| 国产综合精品在线| 一级黄色在线播放| 国产777精品精品热热热一区二区| 99麻豆久久久国产精品免费| 自拍av一区二区三区| 亚洲综合色婷婷在线观看| gogo大胆日本视频一区| 亚洲999一在线观看www| 综合综合综合综合综合网| 成人高清网站| 精品国产污污免费网站入口| 99久久综合网| 欧美天堂视频| 欧美激情免费视频| 久久亚洲av午夜福利精品一区| 日韩欧美在线一区二区三区| 久久综合图区亚洲综合图区| 精品国产免费人成电影在线观看四季| 久久精品久久久久久| 久久久久久免费观看| 最近2018中文字幕免费在线视频| 福利资源在线久| 欧美日韩123区| 日精品一区二区三区| 爽爽窝窝午夜精品一区二区| 欧美一区二区在线免费播放| 中日韩脚交footjobhd| 精品无码一区二区三区的天堂| 日本黄色成人| bt在线麻豆视频| 岛国毛片在线观看| 五月激情综合网| 亚洲色图 激情小说| 久草在线综合| 亚洲夜晚福利在线观看| 91视频久久| 波多野结衣一区二区在线| 久久人体av| 免费在线观看黄色| 2019一级黄色毛片免费看网| 97影院在线午夜| 色一情一乱一伦一区二区三区日本| 强开小嫩苞一区二区三区视频| 老牛嫩草一区二区三区日本| 国产在线视频一区二区三区| 亚洲精选免费视频| 九九热免费在线| 爱爱爱视频网站| 久久亚洲风情| 亚洲一区免费在线| 四虎影视成人精品国库在线观看| 成人小视频免费在线观看| 一级毛片免费高清中文字幕久久网| 亚洲自拍偷拍网址| 欧美调教femdomvk| 全黄性性激高免费视频| 国产成人亚洲综合色影视| 男人的天堂最新网址| 91精品久久久久久久蜜月| 美女主播视频一区| 日本高清视频在线观看| 日本高清不卡的在线| 国产精品午夜视频| www.成人网| 日韩大陆欧美高清视频区| 超碰在线免费看| 妞干网免费在线视频| 免费试看一区| 性一交一乱一伧老太| 亚洲激情丁香| 中文字幕无人区二| 亚洲成人久久网| 香蕉视频国产在线观看| 欧美性感美女一区二区| 中文字幕高清在线播放| 九一在线免费观看| 你懂的亚洲视频| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产精品久久久久精| 欧美黑人xx片| 国产精品剧情在线亚洲| 91免费版看片| 成人精品在线视频观看| 久久久久久无码精品大片| 亚洲人在线播放| 亚洲永久精品ww.7491进入| 亚洲欧洲动漫| 中文人妻熟女乱又乱精品| 91网站观看| 日本免费视频| 国产一区二区视频在线播放| 国产精品一卡二| 久久精品中文字幕免费mv| 4444kk在线观看| 又黄又爽的视频在线观看| 免费黄色av网址| 久久影视中文粉嫩av| 香港三日本8a三级少妇三级99| 亚洲精品人成电影网| 亚洲欧美在线视频免费| 欧美国产日韩激情| www.久色| h1515四虎成人| 免费高清视频在线观看| 日韩av网址在线| 伊人365影院| 韩国成人在线| 国产亚洲精品91在线| 美女扒开尿口让男人操亚洲视频网站| 午夜成人亚洲理伦片在线观看| 在线观看一区二区三区视频| 欧美日韩精品免费在线观看视频| 成人动漫av| 九九在线精品视频| 国产在线一二三区| 精品一区电影国产| 免费观看四虎精品成人| 日韩高清成人在线| 肥熟一91porny丨九色丨| 麻豆精品密在线观看| 91国产丝袜播放在线| 日韩av手机在线播放| 亚洲春色一区二区三区| a级片在线播放| 中文字幕欧美专区| 亚洲精品色婷婷福利天堂| 欧美日韩在线观看视频小说| 日韩精品一区二区三区中文不卡| 91免费观看| 久久国产精品 国产精品| 中文字幕中文乱码欧美一区二区| 免费视频91蜜桃| 亚洲我射av| 亚洲人成伊人成综合网久久久| 中文字幕欧美激情| 亚洲人成网站在线播| 国模无码大尺度一区二区三区| 日韩精品五月天| 欧美久久久网站| 午夜精品无码一区二区三区| 992tv成人免费影院| 欧美视频日韩视频在线观看| 国产天堂第一区| 91精品国产入口在线| 欧美精品三级| 久久婷婷国产精品| 中日韩在线观看视频| 91久久偷偷做嫩草影院电| 97精品在线| 亚洲一区电影在线观看| 99久久精品国产一区二区小说| 777丰满影院| 亚洲第一色av| 美女激情网站| 国产一区二区在线视频聊天| 麻豆网站在线观看| 女人色偷偷aa久久天堂| 蜜臀精品一区二区三区在线观看| 青青操综合网| 91在线观看免费观看| 欧美日韩视频一区二区| 精品街拍一区二区| 印度美女freesex性hd| 亚洲综合免费观看高清完整版| 九九九免费视频| 欧美肥婆xxxx欧美另类| 久久综合丝袜日本网| 国产精品区一区| 蜜桃tv在线播放| 亚洲欧美日韩精品久久亚洲区| 精品人妻伦一二三区久久| 色综合久久中文字幕| 最近2019年手机中文字幕|