檔案I O(不帶緩衝)概述

2022-05-04 20:33:11 字數 912 閱讀 7118

unix系統中大多數檔案i/o只需用到5個函式:open、read、write、lseek以及close。這些函式經常被稱為不帶緩衝的i/o(unbuffered i/o)。術語不帶緩衝指的是每個read和write都呼叫核心中的乙個系統呼叫。這些不帶緩衝的i/o函式不是iso c的組成部分,但是,它們是posix.1和single unix specification的組成部分。

對於核心而言,所有開啟的檔案都通過檔案描述符引用。檔案描述符是乙個非負整數。當開啟乙個現有檔案或建立乙個新檔案時,核心向程序返回乙個檔案描述符。當讀或寫乙個檔案時,使用open或write返回的檔案描述符標識該檔案,將其作為引數傳送給read或write。

按照慣例,unix系統shell使用檔案描述符0與程序的標準輸入相關聯,檔案描述符1與標準輸出相關聯,檔案描述符2與標準出錯輸出相關聯。這是各種shell以及很多應用程式使用的慣例,而與unix核心無關。儘管如此,如果不遵照這種慣例,那麼很多unix系統應用程式就不能正常工作。

在依從posix的應用程式中,幻數0、1、2應當替換成符號常量stdin_fileno、stdout_fileno和stderr_fileno。這些常量都定義在標頭檔案中。

檔案描述符的變化範圍是0-open_max。早期的unix系統實現採用的上限值是19(允許每個程序最多開啟20個檔案),但現在很多系統則將其增至63。

對於freebsd 5.2.1、mac os x 10.3以及solaris 9,檔案描述符的變化範圍實際上是無限的,它只受到系統配置的儲存器總量、整型的字長以及系統管理員所配置的軟限制和硬限制的約束。linux 2.4.22對於每個程序的檔案描述符數的硬限制是1 048 576。

本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:

linux不帶緩衝檔案IO

本博文設計的io不屬於ansi c的檔案io,所涉及的每乙個函式都是乙個系統呼叫。主要涉及posix.1的不帶快取的io操作的基礎部分。在linux核心中,對於乙個檔案的描述只需要乙個標示符即可。而不是乙個複雜的指標,僅僅是乙個int型的整數,有檔案描述符可以直接通過系統api直接操作核心資源,換句...

不帶緩衝的I O

unix系統中的大多數檔案i o只需要用到5個函式 open read write lseek以及close。這些函式經常被稱為不帶緩衝的i o。術語 不帶緩衝 指的是每個read和write都呼叫核心中的乙個系統呼叫。檔案描述符 對於核心而言,所有開啟的檔案都通過檔案描述符引用。檔案描述符是乙個非...

檔案I O(不帶緩衝)之I O的效率

程式清單3 3中的程式使用read和write函式複製檔案。關於該程式應注意下列各點 它從標準輸入讀,寫至標準輸出,這就假定在執行本程式之前,這些標準輸入 輸出已由shell安排好。確實,所有常用的unix系統shell都提供一種方法,它在標準輸入上開啟乙個檔案用於讀,在標準輸出上建立 或重寫 乙個...