檔案I/O
即《UNIX環境高階程式設計》第三章,搬磚。
檔案I/O,也即非緩衝I/O,並非ISOC的一部分,但是是POSIX.1的組成部分,當然也就包含在Single UNIX Specification中。
閉上眼睛想想檔案I/O都需要那些東西:首先是要有對檔案的描述,然後是基本的操作——開啟、關閉、讀、寫,差不多了?哦,還有定位。
是的,也就是這些。相對應的,它們是:檔案描述符、open函式、close函式、read函式、write函式和lseek函式。
1、檔案描述符是什麼?是一個非負整數,代表對檔案的引用。一般慣例來說,最小的檔案描述符都是有主的。0代表標準輸入,1代表標準輸出,2代表標準出錯。但是這不是UNIX核心的規定。所以,為了避免某個天才程式設計師設計一種匪夷所思的系統,使用了別的數值,我們還是不要用這些魔數了吧。事實上,在標頭檔案中(顯然這也是POSIX.1的一部分),定義了STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。在比較現代的UNIX系統實現中,可以認為檔案描述符的範圍沒有限制。
2、如何與檔案描述符互動?檔案描述符是open函式的返回值,其他所有函式都需要檔案描述符作為引數。
3、怎麼使用open函式呢?首先需要提一句的是,其實還有一個creat函式,用於建立新檔案。其實還是creat看起來和諧一點兒,不過它有固有缺陷——只能以只寫方式開啟所建立的檔案,哦,所以很自然地,就被逐漸強大起來地open取代了。由此可見,打鐵還需自身硬啊。夠了,還是說說怎麼使用open函式吧!如果是對於已存在的檔案,需要設定兩個引數:一是檔案路徑,二是訪問標誌位。檔案路徑自不必細說,訪問標誌位的使用類似裝飾模式( !@#$%^&*),首先需要在O_RDONLY、O_WRONLY、O_RDWR中選擇一個,然後在其他選項中選擇任意個(O_APPEND、O_CREAT、O_EXCL、O_TRUNC、O_NOCTTY和O_NONBLOCK),“裝飾”的方式是使用或運算。具體嘛意義以後再說……(坑)
4、open過程中會有什麼問題呢?檔案不存在不算什麼,意料之中的事兒。但是,檔案路徑和檔名都有長度限制(如PATH_NAME、NAME_MAX),一旦超出限制,系統有兩種處理方式:出錯(errno=ENAMETOOLONG)或者無聲無息地截短,這在POSIX.1中是由_POSIX_NO_TRUNC決定的。
5、好,我學會開車了,怎麼剎車呢?用close函式以檔案描述符為引數即可,其實當程式中止時,核心會自動關閉它所開啟的檔案。
相關文章
- 檔案管理I/O筆記筆記
- Python:讀寫檔案(I/O) | 組織檔案Python
- I/O流以及檔案的基本操作
- 一起學Scala 檔案 I/O
- 【Java I/O】如何用Java讀寫檔案Java
- 通過移動資料檔案來均衡檔案I/O
- 透過移動資料檔案來均衡檔案I/O
- ORACLE UTL_FILE檔案包的應用,檔案I/O操作Oracle
- Java I/O流 複製檔案速度對比Java
- 結合 Go 讀 APUE-基本檔案I/OGo
- 為Oracle檔案分割槽以避免I/O爭用Oracle
- 第二十章:非同步和檔案I/O.(九)非同步
- 第二十章:非同步和檔案I/O.(八)非同步
- 第二十章:非同步和檔案I/O.(一)非同步
- 第二十章:非同步和檔案I/O.(二)非同步
- 第二十章:非同步和檔案I/O.(十四)非同步
- Python中檔案I/O高效操作處理的技巧Python
- Java-0024-用I/O實現拷貝檔案Java
- Veritas Quick I/O and Cached Quick I/OUI
- 計算機I/O與I/O模型計算機模型
- I/O埠和I/O記憶體記憶體
- Java學習筆記之I/O流(讀取壓縮檔案以及壓縮檔案)Java筆記
- 二、javase基礎知識總結(從檔案 I/O開始)Java
- 第二十章:非同步和檔案I/O.(二十三)非同步
- 第二十章:非同步和檔案I/O.(二十一)非同步
- Delphi中用於讀寫(I/O)的三種檔案型別 (轉)型別
- I/O程式設計技術(檔案IO)筆記綱要梳理程式設計筆記
- Java I/OJava
- Java(8)I/OJava
- 【java】I/O流Java
- Java I/O流Java
- I/O基礎
- java的I/OJava
- c++ I/OC++
- 分析Mach-O檔案Mac
- 解析Mach-o檔案Mac
- OpenCV學習筆記(六)——對XML和YAML檔案實現I/O操作OpenCV筆記XMLYAML
- InnoDB 中文參考手冊 --- 12 檔案空間管理和磁碟 I/O (轉)