Linux文件IO(文件的读写)
內容源于朱友鵬老師的課程筆記的學習整理,如有侵權,請告知刪除。
一、linux中如何管理文件
(1)硬盤中的靜態文件和iNode(i節點)
- 內容管理表 + 真正存儲的內容;
- 內容管理表以文件為單位進行管理,每個文件一個結構體(即iNode);
- 平常說的快速格式化,其實就是把內容管理表刪除,真正的內容沒有被刪除。
(2)內存中的動態文件和vnode(v節點)
- 每個進程都有一個數據結構(叫進程信息表),記錄了該進程的所有信息;
- 進程信息表中有一個指針指向一個文件管理表(叫文件描述符表);
- 文件描述符表記錄了當前進程打開的所有的文件及其信息,即文件描述符與文件表指針。文件描述符相當于數組下標,數組的值是文件表指針。
- 其中文件表指針指向了文件表,文件表中包含V節點指針、當前文件位移量(即文件指針所處的位置;在動態文件中,文件指針表示當前在文件流的哪個位置)。
- 如圖:
二、一些概念
- API 的一些概念
(1)基于linux做應用開發,其實就是通過調用linux系統提供的API來實現;
(2)API 是一些由linux系統提供的函數,給應用層使用,以完成一定的功能。
(3)常用的文件IO的API 有open,close,write,read,lseek等。
- 文件描述符(fd)
(1)實質就是一些非負整數,用來區分一個程序打開的多個文件;
(2)作用域是當前進程,也就是說,不同進程下打開的文件的文件描述符可以是相同的數字;
(3)fd從0開始,依次增加。其中0,1,2已經被stdin,stdout,stderr這3個文件占用,也就是說,當運行一個程序時,默認打開了上述三個文件,即把鍵盤、屏幕當做文件。
- 文件IO和標準IO的異同
(1)標準IO是C庫函數,文件IO是系統提供的API;
(2)C庫函數由API封裝而來;
(3)C庫函數具有移植性,而API是針對具體的系統設計的;
(4)標準IO帶有緩存,而文件IO沒有緩存。
- man手冊的查詢
? ? ?man ?1 ?xxx ? ?查詢linux的shell命令
? ? ?man ?2 ?xxx ? ?查詢API
? ? ?man 3 ? xxx ? ?查詢庫函數
- 退出進程
(1)打開文件時如果就出錯了,后面的操作就應該不再進行。如 _exit(-1)
(2)退出程序:在main中用return,正常return 0,異常return -1;典型的終止進程應該用exit,_exit,_Exit,后二者是系統API,前者是庫函數。?
- 文件的重定位(即把向屏幕輸出的內容,輸出到某個文件)
? ? ? ? ? ? fd1=open("文件名",flag) ; ? ? ??
? ? ? ? ? ? close(1);
? ? ? ? ? ? fd2=dup(fd1);
三、常見的API
(1)常用文件IO的API 有open,close,write,read,lseek,dup,dup2,fcntl等,具體使用方法可以查看man手冊;
(2)注意open里面的flag對文件操作的影響。
總結
以上是生活随笔為你收集整理的Linux文件IO(文件的读写)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓版 网易云音乐 6.4.3
- 下一篇: C中静态存储区和动态存储区