文章目錄
- 1.再次理解open介面
- 1.1opne的第三個引數
- 1.2第二個引數為什么為整形
- 2.write系統呼叫介面
- 2.1write介面
- 2.2系統呼叫介面和庫函式介面區別
- 3.緩沖區
- 3.1緩沖區是由語言提供的
- 3.2為什么需要緩沖機制
- 4.dup2、檔案重定向
- 4.1dup2
- 4.2檔案重定向
- 5.理解檔案系統
- 5.1檔案系統是什么
- 5.2為什么需要檔案系統
- 5.3檔案系統如何對磁盤進行管理
- 5.3.1磁盤資料抽象化
- 5.3.1磁盤的磁區管理
- 5.4我們的目錄之中保存的是什么
- 5.5對檔案操作的流程
- 5.6檔案軟硬鏈接
- 6.動靜態庫的打包方法
- 6.1什么是函式庫
- 6.2動靜態庫的差別
- 6.3函式庫生成
- 6.3.1常用命令
- 6.3.2函式庫需具備條件
- 6.3.3靜態庫生成
- 6.3.4動態庫生成
1.再次理解open介面
1.1opne的第三個引數

1.2第二個引數為什么為整形

2.write系統呼叫介面
2.1write介面
wtite的第一個引數是fp,我們的行程呼叫write介面,通過PCB之中保存的資訊,,找到對應的結構體struct file_struct,再找到結構體之中的結構體指標陣列 struct file*fd_array[],然后通過給定的引數fp即我們的陣列的下標,取出保存的描述檔案的結構體 struct file的指標,找到對應的檔案結構體,得到檔案的資訊,與存盤位置,即找到了我們的檔案

2.2系統呼叫介面和庫函式介面區別
系統呼叫介面是系統直接提供給外部使用的,庫函式則是在此之上的進一步封裝

3.緩沖區
3.1緩沖區是由語言提供的
我們的緩沖區是由語言提供的,由FILE 結構體進行維護

3.2為什么需要緩沖機制
提高計算器處理的效率,比如我們的程式會將資料全部存盤在快取區之中,在合適的時候再呼叫write重繪至系統之中
如果每產生一次資料就往系統重繪一次,這樣會導致互動資料的次數大幅度的增長,效率也會急劇的下降
4.dup2、檔案重定向
4.1dup2
int dup2(int oldfd, int newfd);
newfid是oldfd的一份拷貝

4.2檔案重定向
結合上面描述可知,我們的輸出函式之中,stdout的描述結構體之內,必然包含1號檔案描述符;
而我們的dup2可以將檔案描述符對應的內容進行賦值拷貝,因此檔案重定向的實作原理就是,利用dup2貍貓換太子,
將1號檔案描述符之中的內容替換成新的指向檔案結構體的指標,但是我們的輸出函式之中,保存的資訊永遠是1號檔案描述符
呼叫輸出函式還是會向1號檔案描述符指向的檔案之中輸出資訊,這樣就完成了重定向,
追加重定向則是在打開檔案的時候添加O_APPEND引數
打開的檔案要進行關閉,實際我們的檔案描述符是有限的(初始默認32個),無限制的打開而不關倍訓造成檔案描述符資源泄漏
5.理解檔案系統
5.1檔案系統是什么
檔案系統是作業系統用于明確存盤設備(常見的是磁盤,也有基于NAND Flash的固態硬碟)或磁區上的檔案的方法和資料結構
我們的硬碟上面存盤著許多檔案,同樣需要將其管理起來,對應的就需要有管理者進行管理,這個管理者就是檔案系統,檔案系統對磁盤進行磁區統籌,管理,
再形象一點,檔案系統管理著很多檔案,這些檔案就是資料,而這些資料存盤在硬碟上,
所以檔案系統就是管理磁盤的軟體系統,它降低了磁盤空間的使用難度,將磁盤資料更加形象化的展示給用戶

5.2為什么需要檔案系統

5.3檔案系統如何對磁盤進行管理
5.3.1磁盤資料抽象化

5.3.1磁盤的磁區管理

5.4我們的目錄之中保存的是什么

5.5對檔案操作的流程

5.6檔案軟硬鏈接
檔案鏈接分為硬鏈接和軟鏈接兩種,
硬鏈接沒有獨立的inode,只是增加了一個和inode具有映射關系的檔案名,并沒有創建新的檔案
軟鏈接則創建了新的檔案,具有獨立的inode,這個檔案保存著鏈接檔案的路徑


6.動靜態庫的打包方法
6.1什么是函式庫
由上述可知,我們在預處理階段只是將頭檔案“stdio.h”進行了包含,并且頭檔案中只有printf函式的宣告,并沒有實作,那么是在哪里實作函式的呢?
系統將這些函式的實作都放到了名為libc.so.6的庫檔案中去了,在沒有特別指定的時候,gcc會到系統默認的搜索路徑/usr/lib下進行查找,也就是鏈接到libc.so.6庫函式中去,這樣就實作了函式,這也是鏈接的作用;

6.2動靜態庫的差別
靜態鏈接:在編譯鏈接的時候,將對應的代碼拷貝至源檔案
假如有n個程式都呼叫了庫的同一個介面,則都需要拷貝一份,在一定程度上占用資源(硬碟資源和記憶體資源)
動態庫:在運行的時候才去鏈接動態庫的代碼,整個系統里面可以只有一份,多個程式共享使用庫的代碼


6.3函式庫生成
6.3.1常用命令
ldd:查看一個可執行檔案依賴的庫
ar -rc:靜態庫打包
ar -tv:查看庫依賴的檔案
6.3.2函式庫需具備條件

6.3.3靜態庫生成


6.3.4動態庫生成



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271491.html
標籤:其他
上一篇:Redhat8 基礎命令
下一篇:linux基礎--常用命令
