APUE 學習筆記 二 檔案I O

2022-07-08 18:36:13 字數 1512 閱讀 2528

對於核心而言,所有開啟的檔案都通過檔案描述符引用,核心不區分文字檔案和二進位制檔案

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標誌。可以...