分類: 《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 ...