文件IO(一)
- 文件IO
- 文件的分類
- 在文件IO下,文件分類
- 按存儲的內容分
- 按照操作分
- 標準IO和文件IO的區別
- 系統調用和庫函數的區別
文件IO
- 把程序暫存在內存的數據,存儲到本地外存上
文件的分類
在Linux系統下,文件共分為7類
- 普通文件
d 目錄文件
p 管道文件
l 鏈接文件
b 塊設備文件
c 字符設備文件
s 套接字(Socket)文件 跨主機之間的通信
在文件IO下,文件分類
按存儲的內容分
文本文件:存儲的是數據的阿斯克碼(0~127),EOF(end of file,-1)
二進制文件:存儲的是數據在內存上的原樣存儲
文本文件,在存儲的時候,需要數據和阿斯瑪轉換,一般存儲數據量比較大的數據,最終結果
二進制文件,一般存儲中間變量
按照操作分
帶緩沖區操作的文件:標準IO,內存上的緩沖區,庫函數
不帶緩沖區操作的文件:文件IO
標準IO和文件IO的區別
標準IO:
1.標準IO由ANSI C標準定義, 庫函數提供的
2.跨平臺性,移植性較好
3.有緩沖區的操作,標準IO的效率比文件IO的效率高
4.一般以文件流指針作為操作依據
文件IO:
1.由POSIX定義,操作系統提供的系統調用提供的
2.移植性差
3.效率較低
4.一般以文件描述符作為操作依據
系統調用和庫函數的區別
- 提供者:
- 系統調用:由操作系統內核提供。它們是內核暴露給應用程序的接口,用于請求內核執行某些操作,如
文件操作、進程管理、內存管理等。 - 庫函數:由標準庫或第三方庫提供。這些函數通常是對系統調用的封裝,也可能包含其他功能,如數學
運算、字符串處理等。
- 運行時間:
- 系統調用:屬于機器時間,執行時通常涉及用戶態到內核態的切換,這通常比用戶態內的操作更耗時。
- 庫函數:屬于用戶時間,在用戶態執行,不涉及上下文切換,因此通常更快。
- 運行空間:
- 系統調用:在內核空間執行,這是操作系統保護的區域,用于執行特權操作。
- 庫函數:在用戶空間執行,這是應用程序運行的地方。
- 效率:
- 系統調用:由于涉及上下文切換和內核態執行,通常比庫函數調用更耗時。
- 庫函數:在用戶態執行,沒有上下文切換的開銷,因此通常更高效。
- 移植性:
- 系統調用:依賴于特定的操作系統和內核,因此通常不易移植到其他操作系統。
- 庫函數:如果遵循標準庫規范,通常可以在多種操作系統上運行,具有較好的移植性。
- 返回值:
- 系統調用:通常返回特定的錯誤碼或狀態信息,用于指示調用是否成功以及可能的錯誤原因。
- 庫函數:返回值取決于具體的函數,可能返回計算結果、指針、狀態碼等。
- 功能的復雜程度:
- 系統調用:通常執行底層的、原子性的操作,如打開文件、創建進程等。
- 庫函數:可能執行更復雜的任務,這些任務可能涉及多個系統調用或其他庫函數的組合。
- 功能能否重寫:
- 系統調用:作為操作系統的一部分,通常不能由用戶重寫。
- -庫函數:用戶可以根據自己的需要重寫庫函數,或者使用不同的庫實現相同的功能。
總的來說,系統調用提供了與操作系統內核交互的接口,而庫函數則為用戶提供了更高級、更易于使用的功能。