1、 lseek的返回值應該判斷是否為0,而不是小於0。
2、 偏移量可以大於檔案大小。這個時候會有檔案空洞。
4、 open加上標誌:o_create和o_excl可以判斷檔案是否存在。
5、 dup和dup2可複製檔案描述符。並可指定複製後的描述符。
6、 linux ext2檔案系統不支援o_sync標誌。可以通過fsync函式來實現。
1、 檔案可以截斷:truncate()
2、 remove可以刪除檔案或者目錄的連線。
3、 rename可以為檔案或者目錄更改名稱。不過有很多注意。
4、 mkdir和rmdir建立和刪除目錄。
5、 chdir,fchdir,getcwd:更改路徑,獲取路徑。
6、 unix對目錄的深度有限制嗎?
1、 流的定向是什麼作用?fwide函式可以檢視,設定流的定向。
2、 快取的三個型別:1)全緩衝,填滿緩衝區才進行讀寫。2)行緩衝,遇到換行符,進行io,或者行緩衝區填滿,即使沒有換行符,也要io。3)不緩衝。
3、 標準出差時不緩衝的,開啟至終端裝置的流程是行緩衝的,其他是全緩衝的。
4、 流的緩衝可以通過函式setbuf或者setvbuf來進行設定。必須在流開啟後,使用前進行設定(如果在使用後設定什麼效果?失敗?段錯誤?成功?)。
5、 setbuf如果buf為null,則是關閉緩衝。如果與終端裝置關聯,某些裝置也會設定為行緩衝。
函式mode
buf緩衝區及場地
緩衝型別
setbuf無非空
長度為bufsize的使用者buf
全緩衝或行緩衝
null
無緩衝區
不帶緩衝
setvbuf
_iofbf
非空長度為size的使用者buf
全緩衝null
合適長度的系統緩衝區,一般是塊的長度。
_iolbf
非空長度為size的使用者buf
行緩衝null
合適長度的行緩衝
_ionbf
忽略無緩衝
無緩衝6、 如果fflush引數為null,會清空所有快取。
7、 開啟流函式:fopen,freopen(指定流上開啟),fdopen。
8、 開啟方式:限制r
war+w+
a+檔案必須存在是是
擦除以前內容是是
流可以讀是是
是是流可以寫是是
是是是流只寫在尾端是是
9、 io效率:對cpu來說,不同的方案差別在於使用者呼叫和系統呼叫的次數,影響的因素包括快取大小。
10、 二進位制io:fread函式返回的nobj小於傳入的nobj,則可能出錯,或者到達尾端,需要呼叫ferror或者feof。
11、 fread函式的侷限在於無法讀網路上的檔案,因為存放方式不同,而且整數浮點數儲存也不相同。網路檔案需要通過高階協議讀寫,比如smbd。
12、 定位流函式:ftell,fseek。
13、 幾個格式化函式:
a) sprintf:會在結尾自動新增null,但是返回值中不包含這個位元組。buf其他的部分不變。
b) snprintf:1)返回值不包括null,另外,其實返回的是格式化後字串的大小,而不是寫進去的字串的大小。2)不會將其他的部分清空為0。這一點和strncpy不同。3)如果返回值大於等於n,則說明緩衝區溢位了,有東西被丟棄了。
14、 fileno可以獲得流的描述符。
15、 比檔案io更高效的函式:fio,sfio,mmap。抽時間可以研究一下。
APUE 學習筆記 檔案I O
本章節主要講了 linux 系統下的關於檔案i o操作的幾個函式 open read write lseek close 的使用和需要注意的一些細節。接著,又介紹了多程序見如何共享檔案。下面開始知識點梳理。對於核心來說,所有開啟的檔案,都是通過檔案描述符來引用。當開啟或建立乙個新的檔案的時候,核心都...
APUE 學習筆記 1 Unix檔案IO
標頭檔案 為了節省時間,僅簡單記錄函式的名字忽略原型,重點在於記下自己實踐中的感悟。function creat open close read write lseek fcntl file io.h pragma once include include include apue.h includ...
學習APUE筆記2 檔案IO
fd是在檔案io中貫穿始終的型別 1 檔案描述符的概念 整形數 陣列下標 檔案描述符優先使用當前可用範圍內最小的 作用域 當前程序 2 檔案io操作 open close read write lseek 1 開啟乙個檔案 int open const char pathname,int flags...