linux系統編程基礎(二) C 標準IO 庫函數與Unbuffered IO函數

來源:互聯網
上載者:User

先來看看C標準I/O庫函數是如何用系統調用實現的。

fopen(3)

調用open(2)開啟指定的檔案,返回一個檔案描述符(就是一個int 類型的編號),分配一個FILE 結構體,其中包含該檔案的描述符、I/O緩衝區和當前讀寫位置等資訊,返回這個FILE 結構體的地址。

fgetc(3)

通過傳入的FILE *參數找到該檔案的描述符、I/O緩衝區和當前讀寫位置,判斷能否從I/O緩衝 區中讀到下一個字元,如果能讀到就直接返回該字元,否則調用read(2),把檔案描述符傳進 去,讓核心讀取該檔案的資料到I/O緩衝區,然後返回下一個字元。注意,對於C標準I/O庫來 說,開啟的檔案由FILE *指標標識,而對於核心來說,開啟的檔案由檔案描述符標識,檔案描述符從open 系統調用獲得,在使用read 、write 、close 系統調用時都需要傳檔案描述符。

fputc(3)

判斷該檔案的I/O緩衝區是否有空間再存放一個字元,如果有空間則直接儲存在I/O緩衝區中並 返回,如果I/O緩衝區已滿就調用write(2) ,讓核心把I/O緩衝區的內容寫迴文件。

fclose(3)

如果I/O緩衝區中還有資料沒寫迴文件,就調用write(2) 寫迴文件,然後調用close(2) 關閉文 件,釋放FILE 結構體和I/O緩衝區。

以寫檔案為例,C標準I/O庫函數(printf(3) 、putchar(3) 、fputs(3) )與系統調用write(2) 的關 系如下圖所示。

庫函數與系統調用的層次關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.