《UNIX環境高階程式設計》筆記 檔案共享

2021-06-25 17:09:09 字數 1439 閱讀 2228

分類: 《unix環境高階程式設計》筆記

2013-09-13 15:51

500人閱讀收藏 

舉報目錄(?)

[-]

檔案共享

dup和dup2函式

核心使用3種資料結構來表示開啟的檔案,他們的關係如下:

每個程序都有一張程序表項,記錄程序開啟的檔案:

fd標誌:close_on_exec,若乙個檔案描述符在close_on_exec中的對應位元位被設定,那麼在執行execl函式時該描述符將被關閉,

即在execl函式執行的程式中直接使用該描述符,則會出錯(但是如果是子程序,則仍然可以使用該fd,不管close_on_exec設定

成什麼);

否則該描述符將始終處於開啟狀態,即在在execl函式執行的程式中可以直接使用該描述符。

檔案指標:指向檔案表。

檔案表:

flag引數。

當前檔案偏移量:當執行了write後,當前檔案偏移量就增加了相應的長度,如果偏移量超過了檔案的長度,則將i節點表中的當前

v節點指標:指向v節點表。

v節點表:

v節點包含了檔案型別和對此檔案進行各種操作的函式指標。

v節點還包含了該檔案的i節點(i-node)。

(linux沒有使用v節點,只使用了通用i節點結構,這2種實現上有所不同,但是概念上是一樣的)

上圖表示乙個程序開啟了2個不同的檔案,乙個是標準輸入,乙個是標準輸出。

下圖表示2個不同的程序開啟同乙個檔案。

這2個函式是用來複製乙個現存的檔案描述符,函式的定義如下:

[cpp]view plain

copy

#include 

intdup(

intfiledes); 

//複製filedes,並返回新的filedes(該檔案描述符是當前可用檔案描述符中最小值),如出錯,返回-1

intdup2(

intfiledes, 

intfiledes2);   

//使用filedes2複製filedes,如果filedes2已經開啟,則先關閉它;如果filedes等於filedes2,則返回filedes2,而不關閉它。

下圖顯示了執行如下語句的結果:(假設當前可用檔案描述符的最小值是3)

複製乙個檔案描述符的另一種方法是使用fcntl函式,這個函式會在以後進行介紹。

檔案訪問許可權(UNIX環境高階程式設計筆記)

st mode值也包含了對檔案的訪問許可權位。所有檔案型別都有訪問許可權 access permission st mode遮蔽 含義s irusr s iwusr s ixusr 使用者讀 使用者寫使用者執行 s irgrp s iwgrp s ixgrp 組寫組讀 組執行s iroth s iw...

檔案長度 檔案截斷(UNIX環境高階程式設計筆記)

檔案長度 stat結構成員st size表示以位元組為單位的檔案的長度。此字段只對普通檔案 目錄檔案和符號鏈結有意義。對於普通檔案,其長度可以是0,在開始讀這種檔案時,將得到檔案結束 end of file 指示。對於目錄,檔案長度通常是乙個數 如16或512 的整倍數。對於符號鏈結,檔案長度是在檔...

unix環境高階程式設計 err檔案

include apue.h include for definition of errno include iso c varialbe aruments static void err doit int,int,const char va list nonfatal error related ...