コンテンツにスキップ

「デバイスファイル」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
予約デバイスから統合
統合後の整理
1行目: 1行目:
{{mergefrom|予約デバイス|date=2012年3月}}
'''デバイスファイル'''({{lang-en-short|Device file}})または'''スペシャルファイル'''({{lang-en-short|Special file}})とは、[[ファイルシステム]]上であたかも通常の[[ファイル (コンピュータ)|ファイル]]のような形で提示される[[デバイスドライバ]]の[[インタフェース (情報技術)|インタフェース]]である。これにより、ソフトウェアが[[入出力]][[システムコール]]を通してデバイスドライバを使うことができ、作業が単純化される。
'''デバイスファイル'''({{lang-en-short|Device file}})または'''スペシャルファイル'''({{lang-en-short|Special file}})とは、[[ファイルシステム]]上であたかも通常の[[ファイル (コンピュータ)|ファイル]]のような形で提示される[[デバイスドライバ]]の[[インタフェース (情報技術)|インタフェース]]である。これにより、ソフトウェアが[[入出力]][[システムコール]]を通してデバイスドライバを使うことができ、作業が単純化される。


52行目: 51行目:
バージョン 7 以降の [[Fedora Core|Fedora]] などの Linux ディストリビューションでは、<code>sd</code> をあらゆるディスクドライブに使っている([[:en:LibATA|LibATA]])<ref>{{cite web |url=http://docs.fedoraproject.org/release-notes/f7/en_US/sn-Installer.html |title=Installation Notes |accessdate=2007年9月22日 |date=[[2007年]][[5月31日]] |publisher=Red Hat, Inc. |work=Fedora 7 Release Notes}}</ref>。
バージョン 7 以降の [[Fedora Core|Fedora]] などの Linux ディストリビューションでは、<code>sd</code> をあらゆるディスクドライブに使っている([[:en:LibATA|LibATA]])<ref>{{cite web |url=http://docs.fedoraproject.org/release-notes/f7/en_US/sn-Installer.html |title=Installation Notes |accessdate=2007年9月22日 |date=[[2007年]][[5月31日]] |publisher=Red Hat, Inc. |work=Fedora 7 Release Notes}}</ref>。


== MS-DOS ==
== MS-DOS・Windows ==
[[MS-DOS]] は UNIX からスペシャルファイルの概念を導入したが、これを'''デバイスファイル'''と呼んだ。ごく初期のMS-DOSは[[ディレクトリ]]階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を[[予約語]]にしていた。つまり、特定のファイル名がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、[[CP/M]] の [[Peripheral Interchange Program|PIP]] コマンドでの「スペシャルファイル」と互換になるよう選ばれている。
[[MS-DOS]] は UNIX からスペシャルファイルの概念を導入したが、これを'''デバイスファイル'''と呼んだ。ごく初期のMS-DOSは[[ディレクトリ]]階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を[[予約語]]にしていた。つまり、特定のファイル名がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、[[CP/M]] の [[Peripheral Interchange Program|PIP]] コマンドでの「スペシャルファイル」と互換になるよう選ばれている。これは[[Winodows]]にも引き継がれ、'''予約デバイス名'''とも呼ばれる。


主なものを下の表に示すが、ほかにも予約デバイス名は存在する<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2003-05-12|url=http://support.microsoft.com/kb/74496/en-us|title=MS-DOS Device Driver Names Cannot be Used as File Names|work=Microsoftサポート技術情報|language=英語|accessdate=2008-11-30}}</ref>
主なデバイスファイルを下表に示す。
<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2005-08-19|url=http://support.microsoft.com/kb/100108/ja|title=FAT、HPFS、NTFSファイルシステムについて|work=Microsoftサポート技術情報|accessdate=2008-11-30}}</ref>。
{| class="wikitable" cellpadding=4
{| class="wikitable" cellpadding=4
!ファイル名
!ファイル名
79行目: 79行目:
|}
|}


予約語に[[拡張子]]を付与しても同様に予約されたデバイスを意味する。つまり、"nul.doc" や "con.htm" はファイル名ではなく、それぞれNULとCONデバイスと解釈される。
予約語に[[拡張子]]を付与しても同様に予約されたデバイスを意味する。つまり、"nul.doc" や "con.htm" はファイル名ではなく、それぞれNULとCONデバイスと解釈される。また、C:\WINDOWS\CONなどのようにパス名の体を成していても予約デバイス名として扱われる。さらに、MSCDEXとCD-ROMドライバ間で使用するデバイス名も同様に予約デバイス名として扱われる。

'''予約デバイス'''(よやくデバイス)とは、[[Microsoft Windows|Windows]]において[[ハードウェア|ハードウェアデバイス]]を表す識別子である。このため、ファイル名としては使用できない。[[UNIX]]での[[スペシャルファイル]]に相当する。

== 主な予約デバイス ==
主なものだけ取り上げており、ほかにも予約デバイス名は存在する<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2003-05-12|url=http://support.microsoft.com/kb/74496/en-us|title=MS-DOS Device Driver Names Cannot be Used as File Names|work=Microsoftサポート技術情報|language=英語|accessdate=2008-11-30}}</ref>
<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2005-08-19|url=http://support.microsoft.com/kb/100108/ja|title=FAT、HPFS、NTFSファイルシステムについて|work=Microsoftサポート技術情報|accessdate=2008-11-30}}</ref>。
;con
:[[コンソール]]、すなわち現在入出力を行っている画面・キーボードを表す。
;nul
:[[Null]]デバイスを表す。nulへの出力はどこへも保存されず、nulからの入力は、あたかも0バイトのファイルのごとく即座にファイル終端に達する。典型的な使用法は、出力が不要な場合に用いるというものである。
;aux
:補助入出力、すなわちCOMポート ([[RS-232|RS-232C]])を表す。
;prn
:プリンタ、すなわちLPTポートを表す。

Windowsでは、C:\WINDOWS\CONなどのようにパス名の体を成していても予約デバイス名として扱われる。また、MSCDEXとCD-ROMドライバ間で使用するデバイス名も同様に予約デバイス名として扱われる。


== CONCON問題 ==
=== CONCON問題 ===
CONCON問題は、[[Windows 9x系]]の予約名の扱いのバグを突いて、対象のコンピュータをフリーズさせる攻撃を行えるという問題である。例えば、"C:\CON\CON"へのリンクのあるウェブページを用意して、それをクリックさせるなどという風に悪用された。これは、9x系に予約デバイス名が複数回現れるパスを指定してファイルを開こうとするとシステムがフリーズしてしまうバグが存在したためであり、現在では修正プログラムが公開されている<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2007-07-18|url=http://support.microsoft.com/kb/256015/ja|title=パスに複数の MS-DOS デバイス名が含まれていると致命的な例外 0E が発生する|work=Microsoftサポート技術情報|accessdate=2008-11-30}}</ref>。
CONCON問題は、[[Windows 9x系]]の予約名の扱いのバグを突いて、対象のコンピュータをフリーズさせる攻撃を行えるという問題である。例えば、"C:\CON\CON"へのリンクのあるウェブページを用意して、それをクリックさせるなどという風に悪用された。これは、9x系に予約デバイス名が複数回現れるパスを指定してファイルを開こうとするとシステムがフリーズしてしまうバグが存在したためであり、現在では修正プログラムが公開されている<ref>{{Cite web|author=マイクロソフト|authorlink=マイクロソフト|date=2007-07-18|url=http://support.microsoft.com/kb/256015/ja|title=パスに複数の MS-DOS デバイス名が含まれていると致命的な例外 0E が発生する|work=Microsoftサポート技術情報|accessdate=2008-11-30}}</ref>。



2012年3月14日 (水) 03:32時点における版

デバイスファイル: Device file)またはスペシャルファイル: Special 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]

多くの場合、これらプレフィックスの後に特定の機器に対応した固有の番号が付与される。ハードディスクドライブでは、ドライブを特定する番号の後にパーティションを特定する番号が付与される。従って例えば、/dev/sda3 はディスク上の領域であり、/dev/pts/14 に対応してネットワーク経由の端末セッションがある。

バージョン 7 以降の Fedora などの Linux ディストリビューションでは、sd をあらゆるディスクドライブに使っている(LibATA)[2]

MS-DOS・Windows

MS-DOS は UNIX からスペシャルファイルの概念を導入したが、これをデバイスファイルと呼んだ。ごく初期のMS-DOSはディレクトリ階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を予約語にしていた。つまり、特定のファイル名がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、CP/MPIP コマンドでの「スペシャルファイル」と互換になるよう選ばれている。これはWinodowsにも引き継がれ、予約デバイス名とも呼ばれる。

主なものを下の表に示すが、ほかにも予約デバイス名は存在する[3] [4]

ファイル名 用途
CON コンソール
PRN プリンター
AUX 補助(予備)デバイス
COM0 COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 シリアルポート
LPT1 LPT2 PRN パラレルポート
NUL ビットバケツ

予約語に拡張子を付与しても同様に予約されたデバイスを意味する。つまり、"nul.doc" や "con.htm" はファイル名ではなく、それぞれNULとCONデバイスと解釈される。また、C:\WINDOWS\CONなどのようにパス名の体を成していても予約デバイス名として扱われる。さらに、MSCDEXとCD-ROMドライバ間で使用するデバイス名も同様に予約デバイス名として扱われる。

CONCON問題

CONCON問題は、Windows 9x系の予約名の扱いのバグを突いて、対象のコンピュータをフリーズさせる攻撃を行えるという問題である。例えば、"C:\CON\CON"へのリンクのあるウェブページを用意して、それをクリックさせるなどという風に悪用された。これは、9x系に予約デバイス名が複数回現れるパスを指定してファイルを開こうとするとシステムがフリーズしてしまうバグが存在したためであり、現在では修正プログラムが公開されている[5]


関連項目

脚注

  1. ^ 比較のため http://www.yiluda.net/manual/linux/rute/node21.html を参照。2007年9月4日閲覧
  2. ^ Installation Notes”. Fedora 7 Release Notes. Red Hat, Inc. ( エラー: この日付はリンクしないでください。). 2007年9月22日閲覧。
  3. ^ マイクロソフト (2003年5月12日). “MS-DOS Device Driver Names Cannot be Used as File Names” (英語). Microsoftサポート技術情報. 2008年11月30日閲覧。
  4. ^ マイクロソフト (2005年8月19日). “FAT、HPFS、NTFSファイルシステムについて”. Microsoftサポート技術情報. 2008年11月30日閲覧。
  5. ^ マイクロソフト (2007年7月18日). “パスに複数の MS-DOS デバイス名が含まれていると致命的な例外 0E が発生する”. Microsoftサポート技術情報. 2008年11月30日閲覧。