1. 程式人生 > >linux系統程式設計之struct flock 結構體

linux系統程式設計之struct flock 結構體

該結構是在lock.h檔案中定義。

lock.h File

功能

定義一些檔案的鎖的選項

Description

The flockstructure in the/usr/include/sys/flock.hfile, which describes a lock, contains the following fields:

l_type Describes the type of lock. If the value of theCommandparameter to thefcntlsubroutine isF_SETLKorF_SETLKW, thel_typefield indicates the type of lock to be created. Possible values are:
F_RDLCK
A read lock is requested.
F_WRLCK
A write lock is requested.
F_UNLCK
Unlock. An existing lock is to be removed.

If the value of theCommandparameter to thefcntlsubroutine isF_GETLK, the l_typefield describes an existing lock. Possible values are:

F_RDLCK
A conflicting read lock exists.
F_WRLCK
A conflicting write lock exists.
F_UNLCK
No conflicting lock exists.
l_whence Defines the starting offset. The value of this field indicates the point from which the relative offset, thel_startfield, is measured. Possible values are:
SEEK_SET
The relative offset is measured from the start of the file.
SEEK_CUR
The relative offset is measured from the current position.
SEEK_END
The relative offset is measured from the end of the file.

These values are defined in theunistd.hfile.

l_start Defines the relative offset in bytes, measured from the starting point in thel_whencefield.
l_len Specifies the number of consecutive bytes to be locked.
l_sysid Contains the ID of the node that already has a lock placed on the area defined by thefcntlsubroutine. This field is returned only when the value of theCommandparameter isF_GETLK.
l_pid Contains the ID of a process that already has a lock placed on the area defined by thefcntlsubroutine. This field is returned only when the value of theCommandparameter isF_GETLK.

l_vfs

Specifies the file system type of the node identified in thel_sysidfield.

看一下示例吧!

int
waldirlock(Wal *w)
{
    int r;
    int fd;
    struct flock lk;
    char path[PATH_MAX];

    r = snprintf(path, PATH_MAX, "%s/lock", w->dir);
    if (r > PATH_MAX) {
        twarnx("path too long: %s/lock", w->dir);
        return 0;
    }

    fd = open(path, O_WRONLY|O_CREAT, 0600);
    if (fd == -1) {
        twarn("open");
        return 0;
    }

    lk.l_type = F_WRLCK;
    lk.l_whence = SEEK_SET;
    lk.l_start = 0;
    lk.l_len = 0;
    r = fcntl(fd, F_SETLK, &lk);
    if (r) {
        twarn("fcntl");
        return 0;
    }

    // intentionally leak fd, since we never want to close it
    // and we'll never need it again
    return 1;
}

struct flock 作為fcntl函式的第三個引數,使用F_SETLK,設定了其引數。

相關推薦

linux系統程式設計struct flock 結構

該結構是在lock.h檔案中定義。 lock.h File 功能 定義一些檔案的鎖的選項 Description The flockstructure in the/usr/include/s

Linux系統程式設計程序

1、程序控制塊=程序描述符(PCB) 程序狀態(4/5種):就緒(初始化),執行,掛起(=等待), 停止 PBC成員: 1、程序id 2、程序狀態 3、程序切換需要儲存和恢復的CPU暫存器 4、描述虛擬地址空間資訊 5、描述控制終端的資訊 6、當

linux系統程式設計程序(八):守護程序詳解及建立,daemon()使用

一,守護程序概述 Linux Daemon(守護程序)是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。它不需要使用者輸入就能執行而且提供某種服務,不是對整個系統就是對某個使用者程式提供服務。Linux系統的大多數伺服器就是通過守護程序實現的。常見的守護程序包括系

linux系統程式設計程序(四):程序退出exit,_exit區別即atexit函式

一,程序終止有5種方式: 正常退出: 從main函式返回 呼叫exit 呼叫_exit 異常退出: 呼叫abort 由訊號終止 二,exit和_exit區別: 關於_exit():        #include <unistd.h>     

Linux系統程式設計錯誤處理:perror,strerror和errno

轉自:http://www.linuxidc.com/Linux/2013-07/87238.htm 1,在系統程式設計中錯誤通常通過函式返回值來表示,並通過特殊變數errno來描述。 errno這個全域性變數在<errno.h>標頭檔案中宣告如下:ext

linux系統程式設計檔案I/O

一、檔案描述符              linux系統中,所有開啟的檔案都對應一個數字,這個數字由系統來分配,稱為檔案描述符。        PCB程序控制塊裡有檔案描述符表,以陣列形式存放於核心區。         一個程序預設開啟3個檔案描述符  STDIN_FILE

linux系統程式設計訊號(三):訊號的阻塞與未決

/*************************************************************************     > File Name: process_.c     > Author: Simba     > Mail: [email 

linux系統程式設計程序(一)

本節目標:什麼是程式什麼是程序程序資料結構程序與程式區別與聯絡一,什麼是程式?程式是完成特定任務的一系列指令集合二,什麼是程序?從使用者的角度來看程序是程式的一次動態執行過程從作業系統的核心來看,程序是作業系統分配的記憶體、CPU時間片等資源的基本單位。程序是資源分配的最小單位每一個程序都有自己獨立的地址空間

linux系統程式設計基礎必備(三):檔案描述符file descriptor與inode的相關知識

       每個程序在Linux核心中都有一個task_struct結構體來維護程序相關的 資訊,稱為程序描述符(Process Descriptor),而在作業系統理論中稱為程序控制塊 (PCB,Process Control Block)。task_struct中有一

linux系統程式設計程序的環境變數

環境變數: 環境變數,是指在作業系統中用來指定作業系統執行環境的一些引數。通常具備以下特徵: ① 字串(本質) ② 有統一的格式:名=值[:值] ③ 值用來描述程序環境資訊。 儲存形式:與命令列引數類似。char *[]陣列,陣列名environ,內部儲存

Go程式設計介面作結構屬性

最近在看Ethereum原始碼,發現在它的BlockChain結構體裡面有屬性直接是介面,它有個set函式,用於設定介面的,傳的值為實現這個介面的一個結構體。下面自己試著寫了一個小demo:package main import ( "fmt" ) type A in

linux系統程式設計程序(二):程序生命週期與PCB(程序控制塊)

本節目標: 程序狀態變遷程序控制塊程序建立程序撤消終止程序的五種方法 一,程序狀態變遷 程序的三種基本狀態 就緒(Ready)狀態 當程序已分配到除CPU以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。 執行(Running)狀態 當程序已獲得

學習Linux C程式設計預處理與結構

結構體的一般定義形式為:  struct 結構體名{     型別名1 成員名1;     型別名2 成員名2;     ……     型別名n 成員名n;    }; struct是關鍵字,是結構體型別的標誌。例如,定義一個Carstruct Car {    int wheels; // 輪子數    i

Linux高階程式設計基礎——檔案系統程式設計遞迴遍歷/home目錄

檔案系統程式設計之遞迴遍歷/home目錄 /編寫程式完成以下功能: 1.遞迴遍歷/home目錄,打印出所有檔案和子目錄名稱及節點號。 2.判斷檔案型別,如果是子目錄,繼續進行遞迴遍歷,直到遍歷完所有子目錄為止。/ #include <stdio.h> #include &

Linux高階程式設計基礎——檔案系統程式設計目錄檔案

檔案系統程式設計之目錄檔案 //1.新建/home/user目錄; //2.把當前工作路徑移至/home/user目錄; //3.列印當前工作路徑; #include <stdio.h> #include <stdlib.h> #include <sys

Linux高階程式設計基礎——檔案系統程式設計操作檔案屬性

檔案系統程式設計之操作檔案屬性 /編寫程式實現以下功能: 1.新建檔案,設定檔案許可權遮蔽字為0; 2.建立該檔案的硬連結檔案,列印硬連結檔案的inode節點號和檔案大小; 3.建立該檔案的軟連結檔案,列印軟連結檔案的inode節點號和檔案大小; 列印軟連結檔案中的內容; 4.列印原始檔

Linux高階程式設計基礎——檔案系統程式設計檔案型別資訊

/*檔案系統程式設計之檔案型別資訊——實驗題/ //編寫程式實現以下功能: //1.輸入檔名稱,能夠判斷檔案型別,判斷實際使用者對該檔案具有哪些存取許可權; //2.要求打印出檔案型別資訊,inode節點編號,連結數目,使用者id,組id,檔案大小資訊; //3.修改檔案的許可權為當前使

Linux高階程式設計基礎——檔案系統程式設計檔案寫入操作

檔案系統程式設計之檔案寫入操作——實驗題 //編寫程式碼,完成以下功能: //1.建立檔案file1,寫入字串“abcdefghijklmn”; //2.建立檔案file2,寫入字串“ABCDEFGHIJKLMN”; //3.讀取file1中的內容,寫入file2,使file2中的字串內容為“a

Linux高階程式設計基礎——檔案系統程式設計檔案描述符

檔案系統程式設計之檔案描述符——實驗題 /*編寫程式碼,完成以下功能: 1.建立新檔案,該檔案具有使用者讀寫許可權。 2.採用dup/dup2/fcntl複製一個新的檔案描述符,通過新檔案描述符向檔案寫入“class_name”字串; 3.通過原有的檔案描述符讀取檔案中的內容,並且列印顯示;*/

Linux系統程式設計—共享記憶體mmap

共享記憶體概念 共享記憶體是通訊效率最高的IPC方式,因為程序可以直接讀寫記憶體,而無需進行資料的拷備。但是它沒有自帶同步機制,需要配合訊號量等方式來進行同步。 共享記憶體被建立以後,同一塊實體記憶體被對映到了多個程序地址空間,當有一個程序修改了共享記憶體的資料,其餘的程序均可看見所修改的內容,反之亦然。