《APUE》筆記(1) 檔案I O

2021-04-21 11:55:14 字數 1521 閱讀 6988

1、概述:

(1)、unix類作業系統最重要的兩個東東:程序和檔案

(2)、大多數檔案i/o用到的5個函式:open, close, read, write, lseek. 還有檔案屬性操作函式:dup, fcntl

(3)、unix類作業系統的檔案i/o是不帶快取的i/o(unbuffered-i/o)

2、檔案描述符(file

descriptor,縮寫fd)

(1)、unix類系統一般用0,1,2分別表示stdin_fileno, stdout_fileno, stderr_fileno,來聯絡程序的標準輸入,標準輸出,和標準錯誤。

(2)、範圍是0到open_max

3、oepn: int open(const char *passname, int oflag, .../* , mode_t mode */);

(1)、oflag的值如下:

a、o_rdonly, o_wronly, o_rdwr注意的是這三個東西不是各佔乙個二進位制位,二是0, 1, 2,所以判斷是唯讀,只寫,讀寫時不能用 flag & o_rdonly的方法,只能用flag == o_rdonly。

b、o_creat、o_excl 兩個一起用時,提供乙個原子操作,當檔案已存在時返回錯誤,否則建立檔案;如果沒有o_excl,則當檔案存在時,忽略。用o_creat時候,需要有檔案的mode_t引數。

c、o_nonblock:此標誌只適用於fifo,塊裝置檔案和字元裝置檔案。

d、o_trunc:如果檔案以唯讀或只寫方式開啟,則該檔案長度擷取為0;

e、o_sync:每一次write都等到物理操作完成後再返回。

4、close:int close(int fd);

注意:程序結束時候,核心會自動關閉該程序開啟的所有檔案,有很多程式利用了這一點。

5、lseek:off_t lseek(int fd, off_t offset, int whence);

引數whence的取值:seek_set, seek_cur, seek_end分標識檔案的開頭,當前指標,和結尾。

如果是seek_set,則將當前位移量設定到檔案開始處offset位元組;如果是seek_cur,則offset是相對於檔案指標的當前位置;如果是seek_end,則offset相對於檔案的末尾。後兩種請況的offset可正可負。

返回新的檔案位移量,注意某些 體統某種情況需要返回負值,因此這個測試應該是判斷返回值是否為-1,而不是判<0

6、read:  ssize_t read(int fd, void *buf, size_t len);

write:

ssize_t write(int fd, void *buf, size_t len);

d、非同步i/o許可權

(cmd = f_getown 或 cmd = f_setown)

e、記錄鎖

(cmd = f_gettlk 或 cmd = f_settlk 或 cmd = f_setlkw):高階i/o部分

11、/dev/fd目錄:開啟檔案/dev/fd/n相當於複製描述符n

學習APUE筆記2 檔案IO

fd是在檔案io中貫穿始終的型別 1 檔案描述符的概念 整形數 陣列下標 檔案描述符優先使用當前可用範圍內最小的 作用域 當前程序 2 檔案io操作 open close read write lseek 1 開啟乙個檔案 int open const char pathname,int flags...

APUE 學習筆記 二 檔案I O

對於核心而言,所有開啟的檔案都通過檔案描述符引用,核心不區分文字檔案和二進位制檔案 open函式 o rdonly o wronly o rdwr create函式 close函式 關閉乙個檔案時還會釋放該程序加在該檔案上的所有記錄鎖 lseek函式 顯式地為乙個開啟的檔案設定其偏移量 每個開啟的檔...

APUE讀書筆記 CH3 檔案I O

鑑於buffer和cache其實是不同的東西,所以我不用書上所用的概念,buffer就是buffer,cache就是cahce。不明白的小夥伴傳送過去看看 看過這兩張圖,就明白 buffer 和 cache 之間區別 相對於iso c語言定義的標準i o,posix協議定義的是unbuffered ...