APUE學習筆記 檔案IO

2021-06-07 01:34:47 字數 1834 閱讀 1172

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