對於核心而言,所有開啟的檔案都通過檔案描述符引用,核心不區分文字檔案和二進位制檔案
open函式:o_rdonly o_wronly o_rdwr
create函式:
close函式:關閉乙個檔案時還會釋放該程序加在該檔案上的所有記錄鎖
lseek函式:顯式地為乙個開啟的檔案設定其偏移量
每個開啟的檔案都有乙個與其相關聯的 "當前檔案偏移量",用以度量從檔案開始處計算的位元組數,通常,讀、寫操作都從當前檔案偏移量處開始,並使偏移量增加所讀寫的位元組數
檔案偏移量可以大於檔案的當前長度,寫該檔案會在檔案中形成乙個空洞,檔案中的空洞並不要求在磁碟上占用儲存區。
read函式: 實際讀到的位元組數少於所要求讀的位元組數 的情況:
(1) 讀普通檔案時,在讀要求位元組數之前已達到了檔案尾端,比如到達檔案尾端之前還有30位元組,而要求讀100位元組,那麼下一次read會返回30位元組,再下一次返回0
(2) 當從終端裝置讀時,通常一次最多讀一行
(3) 當從網路套位元組讀時,網路中的緩衝機制可能造成返回值小於所要求讀的位元組數
(4) 當從管道或fifo讀時,例如 管道包含的位元組數少於所需的數量,那麼read將只返回實際可用的位元組數
(5) 當某一訊號造成中斷,而已經讀了部分資料量時
write函式:其返回值要與所寫的位元組數相同,否則表示出錯
核心使用三種資料結構來表示開啟的檔案
(1)每個程序在程序表中都有乙個記錄項,包含檔案描述符表,有乙個檔案描述符標誌和指向檔案表項的指標
(2)核心為所有開啟檔案維護一張檔案表,包含 檔案狀態標誌、當前檔案偏移量、指向該檔案v節點表項的指標
(3)每個開啟檔案都有乙個v節點結構,linux使用inode節點結構,記錄檔案的元資訊,對應於fstat函式
乙個給定的檔案只有乙個v節點表項
每個程序都有它自己對該檔案的當前偏移量
函式返回的新描述符與輸入引數描述符共享同乙個檔案表項
fcntl函式可以改變已開啟的檔案的性質
int fcntl(int fd, int cmd, ...)
fcntl函式有5中功能:
(1)複製乙個現有的描述符 (cmd = f_dupfd)
(2)獲取/設定檔案描述符標記 (cmd = f_getfd, f_setfd)
(3)獲取/設定檔案狀態標誌 (cmd = f_getfl, f_setfl)
(4)獲取/設定非同步i/o所有權 (cmd = f_getown, f_setown)
(5)獲取/設定記錄鎖 (cmd = f_getlk, f_setlk, f_setlkw)
學習APUE筆記2 檔案IO
fd是在檔案io中貫穿始終的型別 1 檔案描述符的概念 整形數 陣列下標 檔案描述符優先使用當前可用範圍內最小的 作用域 當前程序 2 檔案io操作 open close read write lseek 1 開啟乙個檔案 int open const char pathname,int flags...
《APUE》筆記(1) 檔案I O
1 概述 1 unix類作業系統最重要的兩個東東 程序和檔案 2 大多數檔案i o用到的5個函式 open,close,read,write,lseek.還有檔案屬性操作函式 dup,fcntl 3 unix類作業系統的檔案i o是不帶快取的i o unbuffered i o 2 檔案描述符 fi...
APUE學習筆記 檔案IO
1 lseek的返回值應該判斷是否為0,而不是小於0。2 偏移量可以大於檔案大小。這個時候會有檔案空洞。4 open加上標誌 o create和o excl可以判斷檔案是否存在。5 dup和dup2可複製檔案描述符。並可指定複製後的描述符。6 linux ext2檔案系統不支援o sync標誌。可以...