91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-04
  • 語言: 其他
  • 標簽: linux??讀寫鎖??

資源簡介

linux文件讀寫鎖一個例子,已經通過測試,使用非常方便

資源截圖

代碼片段和文件信息

/*
?*?設置記錄鎖子函數lock_set.c
?*
?*?記錄鎖分為讀取鎖和寫入鎖,其中讀取鎖又稱為共享鎖,可以使多個
?*?進程都能夠在文件的同一部分建立讀取鎖。而寫入鎖又稱為互斥鎖,
?*?在任何時刻只能有一個進程在文件的某個部分建立寫入鎖。當然,在
?*?文件的同一部分不能同時建立讀取鎖和寫入鎖。
?*
?*?fcntl的lock結構如下所示:
?*?struct?flock?{
?*?short?l_type;
?*?off_t?l_start;
?*?short?l_whence;
?*?off_t?l_len;
?*?pid_t?l_pid;
?*?}
?*
?*?技巧:為加鎖整個文件,通常的方法是將l_start說明為0,l_whence
?*?說明為SEEK_SET,l_len說明為0。
?*/
#include?
#include?
#include?

#include?
#include?
#include?


void?print_lock(struct?flock?lock)
{
????????printf(“?-----------------------------\n“);

????????if?(lock.l_type?==?F_RDLCK)?{
????????????????printf(“\tl_type:?F_RDLCK\n“);
????????}
????????else?if?(lock.l_type?==?F_WRLCK)?{
????????????????printf(“\tl_type:?F_WRLCK\n“);
????????}
????????else?if?(lock.l_type?==?F_UNLCK)?{
????????????????printf(“\tl_type:?F_UNLCK\n“);
????????}

????????printf(“\tl_start:?%d\n“?(int)lock.l_start);

????????if?(lock.l_whence?==?SEEK_SET)?{
????????????????printf(“\tl_whence:?SEEK_SET\n“);
????????}
????????else?if?(lock.l_whence?==?SEEK_CUR)?{
????????????????printf(“\tl_whence:?SEEK_CUR\n“);
????????}
????????else?if?(lock.l_whence?==?SEEK_END)?{
????????????????printf(“\tl_whence:?SEEK_END\n“);
????????}

????????printf(“\tl_len:?%d\n“?(int)lock.l_len);

????????printf(“?-----------------------------\n“);
}

void?lock_set(int?fd?int?type)
{
????????struct?flock?lock;

????????/*賦值lock結構體,加鎖整個文件*/
????????lock.l_whence?=?SEEK_SET;
????????lock.l_start?=?0;
????????lock.l_len?=?0;

????????while?(1)?{
????????????????lock.l_type?=?type;

????????????????/*
?????????????????*?根據不同的type來給文件加鎖或解鎖,
?????????????????*?如果成功,則返回0,失敗則返回1。
?????????????????*?舉例:如果一個文件原來已經建立了互斥鎖,那么再調用fcntl
?????????????????*?建立鎖就會失敗,返回-1。
?????????????????*/
????????????????if?((fcntl(fd?F_SETLK?&lock))?==?0)?{
????????????????????????/*如果是共享鎖*/
????????????????????????if?(lock.l_type?==?F_RDLCK)?{
????????????????????????????????printf(“read?only?set?by?%d\n“?getpid());
????????????????????????}
????????????????????????/*如果是互斥鎖*/
????????????????????????else?if?(lock.l_type?==?F_WRLCK)?{
????????????????????????????????printf(“write?lock?set?by?%d\n“?getpid());
??

評論

共有 條評論