posix(portable operating system inte***ce,可移植作業系統介面規範)標準最初由ieee(institute of electrical and electronics engineers,電氣和電子工程師協會,是目前最大的全球性非營利性專業技術學會)制定,目的是提高unix環境下程式的可移植性。通俗來講,為乙個相容posix標準的作業系統編寫的應用程式,可以在任何其他相容posix標準的作業系統上編譯執行而無需修改**。常見的linux與unix系統都支援posix標準。
linux系統的乙個成功的關鍵因素是它具有與其他作業系統共存的能力。linux的檔案系統由兩層結構搭建:上面的虛擬檔案系統vfs(virtual file system),和下面的各種不同的具體檔案系統(例如ext、fat32、nfs等)
vfs將各種具體的檔案系統的公共部分抽取出來形成乙個抽象層,位於使用者的程式與具體需要使用的系統中間,並提供系統呼叫介面。這樣我們只需針對vfs提供的系統呼叫進行檔案操作而無需具體考慮底層細節。vfs遮蔽了使用者對底層細節的描述使得程式設計簡化。
可以使用指令
cat /proc/filesystems
檢視當前作業系統支援哪些具體檔案系統。
linux作業系統是基於檔案概念搭建起來的作業系統(「萬物皆檔案」),基於這一點,所有的i/o裝置都可以直接當做檔案來處理。因此操作普通檔案的操作函式與操作裝置檔案的操作函式是相同的,這樣大大簡化了系統對不同裝置、不同檔案的處理,提高了效率。
那麼對於核心而言,核心是如何區分不同的檔案呢?核心使用檔案描述符來索引開啟的檔案。檔案描述符是乙個非負整數,每當開啟乙個存在的檔案或建立乙個新檔案的時候,核心會向程序返回乙個檔案描述符,當對檔案進行相應操作的時候,使用檔案描述符作為引數傳遞給相應的函式。
通常乙個程序啟動時,都會開啟三個流:標準輸入、標準輸出、標準錯誤輸出,這三個流的檔案描述符分別是0、1、2,對應的巨集定義是stdin_fileno、stdout_fileno、stderr_fileno。可以檢視標頭檔案unistd.h檢視相關定義。
流的名稱 檔案描述符 巨集定義
標準輸入 0 stdin_fileno
標準輸出 1 stdout_fileno
標準錯誤輸出 2 stderr_fileno
基於檔案描述符的i/o操作雖然不能直接移植到諸如windows系統等之外的作業系統上,但對於某些底層的i/o操作(例如驅動程式、網路連線等)是唯一的操作途徑。
Linux檔案 標準IO概述
標準i o指的是ansi c中定義的用於i o操作的一系列函式。只要作業系統安裝了c庫,就可以呼叫標準i o。換句話說,若程式使用標準i o函式,那麼源 無需進行任何修改就可以在其他作業系統上編譯,具有更好的可移植性。除此之外,由於標準i o封裝了緩衝區,使得在讀寫檔案的時候減少了系統呼叫的次數,提...
檔案I O(不帶緩衝)概述
unix系統中大多數檔案i o只需用到5個函式 open read write lseek以及close。這些函式經常被稱為不帶緩衝的i o unbuffered i o 術語不帶緩衝指的是每個read和write都呼叫核心中的乙個系統呼叫。這些不帶緩衝的i o函式不是iso c的組成部分,但是,它...
Linux檔案I O操作
可以呼叫l s e e k顯式地定位乙個開啟檔案。include include off t lseek int filesdes,off t offset,int whence 返回 若成功為新的檔案位移,若出錯為 1。對引數offset 的解釋與引數w h e n c e 的值有關。若whenc...