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 ...