漫談 Unix 中的裝置檔案

2021-04-06 19:19:08 字數 1947 閱讀 5819

[ 裝置檔案 ]

unix具有一種統一的、優美的訪問硬體的方法。 在unix中,每乙個硬體裝置都被看作是乙個文

件。為了說明這個問題,我們來做如下的演示,檢視 /dev/hda 這個裝置檔案:

less -f /dev/hda

其實,/dev/hda 並不是乙個檔案,當我們讀取這個裝置檔案的時候,實際情況是我們直接訪問

了電腦的第乙個物理硬碟。如同大家熟知的那樣,/dev/hda 是乙個裝置檔案,所有的裝置檔案

都是位於/dev目錄下的。

裝置檔案可以用來訪問硬體,如果你安裝了乙個音效卡並且做好了設定,你可以做下面的嘗試:

cat /dev/dsp > my_recording

然後對著麥克風說些什麼,接著敲入下面的命令:

cat my_recording > /dev/dsp

是錄音的音量沒有設定正確,也有可能記錄的幀數不正確。)

如果你的滑鼠目前未被任何程式占用,你也可以作如下的嘗試:

cat /dev/mouse

這時,如果你移動滑鼠,滑鼠控制協議的命令內容會直接顯示在你的螢幕上 (看上去像是一些垃

圾資料),

這是一種非常簡潔的方式,可以來判斷你的滑鼠是否工作正常。

在一些比較低的層面,程式常以2種基本的方式來訪問裝置檔案:

1) 讀寫裝置檔案來傳送或是接收大批的資料 (比如類似前文提到的less和cat)

2) 使用c ioctl (io control) 函式來設定裝置 (以音效卡來說,可能是設定單聲道或是立體聲,

記錄的速度等等)

因為每種我們能夠列舉出來的裝置,都可以被轉換來適應上面的2種操作模式(網絡卡除外). 這種模

式從一開始

就延續到現在,可以說是訪問硬體裝置的通用方法了。

[塊裝置和字元裝置]

硬體裝置通常會有2種分類,類似象硬碟和磁帶這樣的我們叫做隨機訪問裝置,類似像滑鼠、音效卡、

終端機這樣的我們稱之為序列裝置。

另一種說法:字元裝置是不通過快取進行訪問的系統元件或是外圍裝置(比如乙太網卡或是印表機)

隨機訪問裝置常用來讀取儲存在持久介質上的大量的相互毗鄰的資料塊. 這些資料是從分散的單元

中讀取出來的(大多數情況下是磁碟,每次讀取1024個位元組),這些就是我們所說的塊裝置。

執行ls -l /dev/hda 命令

將會顯示出你的硬碟是乙個裝置檔案,它們在長格式下列出的時候在

最左邊是以b開頭的:

brw-r-----   1 root     disk       3,  64 apr 27  2005 /dev/hdb

另一方面,序列裝置則是每次讀取乙個位元組,且資料是被獨佔的。例如,當乙個位元組的資料從滑鼠

裝置被某個程式

讀取時,其他程式是無法讀取的。在 ls -l 表示的詳細列表中,字元裝置是以c

開頭的。你的 /dev/dsp (數碼訊號

處理器,-- 比如音效卡)裝置看起來類似:

crw-r--r--   1 root     sys       14,   3 jul 18  2005 /dev/dsp

[主次裝置號]

裝置被劃分出來的類別叫做主裝置號,舉例來說,所有的scsi磁碟的主裝置號為8。更進一步來說,

每乙個單獨的裝置

擁有乙個次裝置號,好比/dev/sda,它的從裝置號就是0。主次裝置號用來作

為面向核心的裝置識別符號。

一句話:major number 用來識別裝置類別,而 minor number 用來區別每乙個裝置型別中的某個

具體的裝置。

裝置的檔名實際上只是按照約定和命名規範給出的一些縮寫,我們可以通過下面的方式來檢視主

次裝置號:

ls -l /dev/sda

brw-rw----   1 root     disk       8,   0 may  5  2005 /dev/sda

這裡的(8, 0)就是主次裝置編號。

未完,待續...

漫談 Unix 中的裝置檔案

裝置檔案 unix具有一種統一的 優美的訪問硬體的方法。在unix中,每乙個硬體裝置都被看作是乙個文 件。為了說明這個問題,我們來做如下的演示,檢視 dev hda 這個裝置檔案 less f dev hda 其實,dev hda 並不是乙個檔案,當我們讀取這個裝置檔案的時候,實際情況是我們直接訪問...

linux 中的裝置檔案

裝置檔案的理解 1.裝置檔案讓程式能夠同系統的硬體和外圍裝置進行通訊,在配置核心時候,那些知道怎樣同系統的每個裝置進行通訊的模組被鏈入核心 2.用於某個特定裝置的模組叫做裝置驅動程式 3.裝置驅動程式提供了乙個標準的通訊介面,該介面看起來就好像乙個普通檔案 4.當核心接到乙個對為字元或塊裝置檔案的請...

Linux中的裝置檔案與裝置號

在linux下,一切皆檔案,裝置也不例外,為了管理這些裝置,系統為它們各自都編了號,而每個裝置號又分為主裝置號和次裝置號。主裝置號用來區分不同型別的裝置,而次裝置號用來區分同一型別內的多個裝置 及其裝置分割槽 乙個linux系統,當前所有註冊裝置的主裝置號可以通過 proc介面檢視 root loc...