歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux I/O(輸入和輸出)

Linux I/O(輸入和輸出)

日期:2017/2/28 16:07:36   编辑:Linux教程

1.文件I/O

1)文件描述符:對於內核而言,所有打開的文件都通過文件描述符引用。文件描述符通常是一個小的非負整數,內核用它標識一個特定進程正在訪問的文件。當內核打開一個已有文件或創建一個新文件時,它返回一個文件描述符。

2)按照慣例,UNIX系統shell使用文件描述符0(STDIN_FILENO)與進程的標准輸入相關聯,文件描述符1(STDOUT_FILENO)與標准輸出相關聯,文件描述符2(STDERR_FILENO)與標准出錯輸出相關聯。這是各種shell以及很多應用程序使用的慣例,而與UNIX內核無關。盡管如此,如果不遵照這種慣例,那麼很多UNIX系統應用程序就不能正常工作。

3)可用的文件I/O函數——打開文件,讀文件,寫文件等。UNIX系統中的大多數文件I/O只需用到5個函數:open、read、write、lseek以及close。它們是不帶緩沖的I/O,都使用文件描述符。在使用read和write函數時,選定不同大小的緩沖區(保存讀和寫的數據),效率是不同的。存在一個最佳效率的緩沖區大小,就是緩沖區大小等於文件系統的塊長。

2.標准I/O

1)對於標准I/O庫,它們的操作則是圍繞流進行的。當用標准I/O庫打開或創建一個文件時,使用一個流與一個文件相關聯。當打開一個流時,標准I/O函數fopen返回一個指向FILE對象的指針。該對象通常是一個結構,它包含了標准I/O庫為管理該流所需要的所有信息,包括:用於實際I/O的文件描述符,指向用於該緩沖區的指針、緩沖區的長度、當前在緩沖區中的字符數以及出錯標志等。

2)預定義了三個標准I/O流,分別為三個文件指針stdin,stdout和stderr。

3)標准I/O庫提供緩沖的目的是盡可能減少使用read和write調用的次數。它對每個I/O流自動地進行緩沖管理,從而避免了應用程序需要考慮這一點所帶來的麻煩。標准I/O提供三種類型的緩沖:全緩沖、行緩沖和不帶緩沖。

3.兩者的區別:

1)前者屬於低級IO,後者是高級IO。

2)前者返回一個文件描述符(用戶程序區的),後者返回一個文件指針。

3)前者無緩沖,後者有緩沖。
4)前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
5)後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。

Copyright © Linux教程網 All Rights Reserved