デバイスファイル
スペシャルファイル(英: Special file)またはデバイスファイル(英: Device file)とは、ファイルシステム上であたかも通常のファイルのような形で提示されるデバイスドライバのインタフェースである。これにより、ソフトウェアが入出力システムコールを通してデバイスドライバを使うことができ、作業が単純化される。
スペシャルファイルは、プリンタなどの周辺機器への単純なインタフェースを提供する。また、ディスクパーティションなどの機器上の特定のリソースへのアクセスにも使える。さらに、/dev/null や擬似乱数生成器といった特定の機器とは対応しないリソースへのアクセスにも使われる。
UNIX
UNIX系オペレーティングシステム(OS)では、スペシャルファイルをデバイスノード(device node)とも呼び、キャラクタデバイスとブロックデバイスに分類される。それらは、OSとハードウェアによるデータの入出力方法に違いがある。また、名前付きパイプのように通常のファイルではない(スペシャルな)オブジェクトと区別するため、デバイススペシャルファイルと呼ぶこともある。
実装
定義上、デバイスノードはOSカーネルが既に確保済みのリソースに対応している。UNIXでは、それらリソースを「メジャー番号」と「マイナー番号」で識別し、それら番号がノードの構造体の一部として格納されている。番号の割り当て方は、OSやプラットフォームによって異なる。一般にメジャー番号がデバイスドライバの識別に使われ、マイナー番号がそのドライバが制御する個々の機器の識別に使われる。この場合、システムはドライバに対して引数としてマイナー番号を渡す。
システムはデバイスノードが通常ファイルであるかのように扱い、標準的なシステムコールを使ってアクセスする。
キャラクタデバイス
キャラクタデバイス(またはキャラクタスペシャルファイル)は、システムが一文字ずつデータを転送する機器に対応している。キャラクタデバイスは、テレタイプ端末/仮想端末/モデムなどのようなバイトストリーム型機器を扱い、データのランダムアクセスはサポートしていないのが普通である。
多くの実装では、キャラクタデバイスはバッファを使わない入出力を行う。システムは文字単位に逐次的に読み書きを行う。
ブロックデバイス
ブロックデバイス(またはブロックスペシャルファイル)は、ブロック形式でデータをやり取りする機器に対応している。ブロックデバイスは、ハードディスクドライブ/CD-ROMドライブ/メモリ領域などのアドレス指定可能な機器を扱う。
ブロックデバイスはランダムアクセスとシークが可能なことが多く、一般にバッファを使った入出力を行う。OSが個々の入出力用に1つのブロックを保持するためのバッファを確保する。プログラムがデータの読み書きを要求すると、システムは適当なバッファを用意してそのデータを保持する。バッファが一杯になると適切な操作(データ転送)が行われ、システムがそのバッファをクリアする。
擬似デバイス
UNIX系システムでは、実際の周辺機器とは対応しないデバイスノードもある。そのようなデバイスノードを「擬似デバイス; pseudo-device」と呼ぶ。これらはOSが制御する各種機能を提供する。以下に、よくある擬似デバイスを列挙する。
/dev/null
- あらゆる入力を受け付け、それを捨てる。出力はしない。ビットバケツの一種。
/dev/zero
- ASCIIのNUL文字(値がゼロ)の列を生成する。
/dev/random
- 可変長の擬似乱数文字列を生成する(ブロックする)。
/dev/urandom
- 可変長の擬似乱数文字列を生成する(ブロックしない)。
慣習的な命名
以下に列挙したのは、Linux系システムでよく使われるデバイスノード名のプレフィックスである。[1]
- fd: フロッピーディスク
- hd: IDE ハードディスクドライブ
- lp: プリンター
- par: パラレルポート
- pt: 擬似端末(仮想端末)
- s: SCSIデバイス一般。特にハードディスク
- scd: SCSI 接続の音声用光ディスク装置
- sd: SCSI 接続のハードディスク
- sg: SCSI 接続の汎用装置
- sr: SCSI 接続のデータ用光ディスク装置
- st: SCSI 接続の磁気テープ
- tty: (物理)端末
多くの場合、これらプレフィックスの後に特定の機器に対応した固有の番号が付与される。ハードディスクドライブでは、ドライブを特定する番号の後にパーティションを特定する番号が付与される。従って例えば、/dev/sda3
はディスク上の領域であり、/dev/pts/14
に対応してネットワーク経由の端末セッションがある。
バージョン 7 以降の Fedora などの Linux ディストリビューションでは、sd
をあらゆるディスクドライブに使っている[2]。
MS-DOS
MS-DOS は UNIX からスペシャルファイルの概念を導入したが、これをデバイスファイルと呼んだ。ごく初期のMS-DOSはディレクトリ階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を予約語にしていた。つまり、特定のファイル名がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、CP/M の PIP コマンドでの「スペシャルファイル」と互換になるよう選ばれている。
主なデバイスファイルを下表に示す。
ファイル名 | 用途 |
---|---|
CON | コンソール |
PRN | プリンター |
AUX | 補助(予備)デバイス |
COM0 COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 | シリアルポート |
LPT1 LPT2 PRN | パラレルポート |
NUL | ビットバケツ |
予約語は拡張子を付与しても使えないので、"nul.doc" や "con.htm" は不正である。一部ユーザはこれに混乱したり、プログラムによるファイル名生成で間違いを犯すことがある。
関連項目
脚注
- ^ 比較のため http://www.yiluda.net/manual/linux/rute/node21.html を参照。2007年9月4日閲覧
- ^ “Installation Notes”. Fedora 7 Release Notes. Red Hat, Inc. ( エラー: この日付はリンクしないでください。). 2007年9月22日閲覧。