接觸Linux很久很久了,但從來沒有留意過Linux的文件類型有哪些,最近我在學習shell腳本編程是看到這 “設備文件” 這個名稱,不理解啊,就上網查了一些資料,做了一些綜述記錄。
Linux操作系統有兩類設備文件:字符設備(character device)、塊設備(block device)?
一、基本概念
1、字符設備: 是一個以字節為單位的順序存取設備,對這種設備的讀寫是按字符進行的,而且這些字符是連續地形成一個數據流。它不具備緩沖區,通常不支持隨機存取。
2、塊設備: 是一種以塊(通常是512字節)為單位的隨機存取設備,程序可自行確定讀取數據的位置。對這種設備的讀寫使用緩沖區來存放暫時的數據,從緩存一次性寫入設備或從設備中一次性讀出放入到緩沖區。
二、詳細解釋
在塊設備中,最小的可尋址單元是扇區,扇區的大小一般是2的整數倍,常見的大小為512個字節。最常見的塊設備是硬盤、閃存、CD-ROM驅動器等。
字符設備按照字符流的方式被有序訪問,所以對這種設備的讀寫是實時的,如鍵盤、終端、磁帶機就都屬于字符設備。
這兩種類型的設備,其根本區別在于它們是否可以被隨機訪問—換句話說就是,能否在訪問設備時隨意地從一個位置跳轉到另一個位置。
舉個例子,鍵盤和硬盤的區別,這個例子來源于網絡[1]。
鍵盤這種設備提供的就是一個數據流。當你輸入“hello”這個字符串時,鍵盤的驅動程序會按照和輸入完全相同的順序返回這個由5個字符組成的數據流。如果讓鍵盤驅動程序打亂順序來讀字符串,那是沒有意義的。所以鍵盤就是一種典型的字符設備,它提供的就是從用戶鍵盤輸入的字符流。對鍵盤進行讀操作會得到一個字符流,依次是“h”、“e”、“l”、“l”、“o”,最終是文件的結束(EOF)。當沒人敲鍵盤時,字符流就是空的。
硬盤設備的情況就不大一樣了。硬盤設備的驅動可能要求讀取磁盤上任意塊的內容,然后又去讀取別的塊的內容,而被讀取的塊在磁盤上位置不一定要連續,所以說硬盤可以被隨機訪問,而不是以流的方式被訪問,所以我們說它是一個塊設備。
三、總結
如果一個硬件設備是以字符流的方式被訪問的話,那就應該將它歸于字符設備;反過來,如果一個設備是隨機(無序的)訪問的,那么它就屬于塊設備。