此為黑馬Linux課程筆記。
1. C標準IO函數工作流程
如圖,以C庫函數的fopen為例,其返回類型是FILE類型的指針,FILE類型包含很多內容,主要包含三個內容:文件描述符、文件讀寫指針的位置和I/O緩沖區的地址。
- 文件描述符:文件描述符(file descriptor)是內核為了高效管理已被打開的文件所創建的索引,其是一個非負整數(通常是小整數),用于指代被打開的文件,所有執行I/O操作的系統調用都通過文件描述符。文件描述符在Linux系統IO函數中很常用。
- 文件讀寫指針位置:用于控制文件的讀寫位置。
- 緩沖區地址:如使用C庫函數fwrite()時,不是直接寫到磁盤中,而是先寫到緩沖區(默認大小8K)中,然后再一起寫入硬盤中。因為反復寫入磁盤,時間都浪費在尋道時間和旋轉延遲上了,所以要一口氣寫入。當以下三種情況發生時,緩沖區的內容寫入文件:1. fflush刷新緩沖區,2.緩沖區已滿,3.正常關閉文件。如圖:
2. C庫IO函數與系統IO函數的關系
如圖所示,使用C庫函數時,C庫函數會調用系統函數write,然后一步一步向下調用。