「デバイスファイル」の版間の差分
InTheCastle (会話 | 投稿記録) →擬似デバイス: ブロックに対し、英語版サイトへの仮リンクを設定。 |
|||
(16人の利用者による、間の29版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2022年3月}} |
|||
'''ス |
'''デバイスファイル'''({{lang-en-short|Device file}})または'''スペシャルファイル'''({{lang-en-short|Special file}})とは、[[ファイルシステム]]上であたかも通常の[[ファイル (コンピュータ)|ファイル]]のような形で提示される[[デバイスドライバ]]の[[インタフェース (情報技術)|インタフェース]]である。これにより、[[ソフトウェア]]が[[入出力]][[システムコール]]を通してデバイスドライバを使うことができ、作業が単純化される。 |
||
ス |
デバイスファイルは、[[プリンター]]などの[[周辺機器]]への単純なインタフェースを提供する。また、[[パーティション|ディスクパーティション]]などの機器上の特定の[[計算資源|リソース]]へのアクセスにも使える。さらに、[[/dev/null]]や[[擬似乱数生成器]]といった特定の機器とは対応しないリソースへのアクセスにも使われる。 |
||
== UNIX == |
== UNIX・Unix系 == |
||
[[UNIX]]系[[オペレーティングシステム]] |
[[UNIX]]・[[Unix系]][[オペレーティングシステム]] (OS) では、デバイスファイルを'''デバイスノード'''({{lang-en-short|device node}})とも呼び、'''キャラクタデバイス'''と'''ブロックデバイス'''に分類される。それらは、OSと[[ハードウェア]]によるデータの[[入出力]]方法に違いがある。また、[[名前付きパイプ]]のように通常のファイルではない(スペシャルな)[[オブジェクト (プログラミング)|オブジェクト]]と区別するため、'''デバイススペシャルファイル'''と呼ぶこともある。 |
||
=== 実装 === |
=== 実装 === |
||
定義上、デバイスノードはOS[[カーネル]]が既に確保済みのリソースに対応している。UNIXでは |
定義上、デバイスノードはOSの[[カーネル]]が既に確保済みのリソースに対応している。UNIXではそれらリソースを「メジャー番号」と「マイナー番号」で識別し、それら番号がノードの構造体の一部として格納されている。番号の割り当て方は、OSや[[プラットフォーム (コンピューティング)|プラットフォーム]]によって異なる。一般にメジャー番号がデバイスドライバの識別に使われ、マイナー番号がそのドライバが制御する個々の機器の識別に使われる。この場合、システムはドライバに対して引数としてマイナー番号を渡す。 |
||
システムはデバイスノードが通常 |
システムはデバイスノードが通常ファイルであるかのように扱い、標準的なシステムコールを使ってアクセスする。 |
||
=== キャラクタデバイス === |
=== キャラクタデバイス === |
||
⚫ | |||
[[画像:Nuvola-fs-chardev.svg|64px|right]] |
|||
⚫ | |||
多くの実装では、キャラクタデバイスは[[バッファ]]を使わない入出力を行う。システムは文字単位に逐次的に読み書きを行う。 |
多くの実装では、キャラクタデバイスは[[バッファ]]を使わない入出力を行う。システムは文字単位に逐次的に読み書きを行う。 |
||
=== ブロックデバイス === |
=== ブロックデバイス === |
||
[[画像:Nuvola-fs-blockdev.svg|64px|right]] |
|||
ブロックデバイス(またはブロックスペシャルファイル)は、[[ブロック (データ)|ブロック]]形式でデータをやり取りする機器に対応している。ブロックデバイスは、[[ハードディスクドライブ]]/[[CD-ROM]]ドライブ/[[記憶装置|メモリ領域]]などのアドレス指定可能な機器を扱う。 |
ブロックデバイス(またはブロックスペシャルファイル)は、[[ブロック (データ)|ブロック]]形式でデータをやり取りする機器に対応している。ブロックデバイスは、[[ハードディスクドライブ]]/[[CD-ROM]]ドライブ/[[記憶装置|メモリ領域]]などのアドレス指定可能な機器を扱う。 |
||
24行目: | 23行目: | ||
=== 擬似デバイス === |
=== 擬似デバイス === |
||
UNIX系 |
UNIX・Unix系OSでは、実際の周辺機器とは対応しないデバイスノードもある。そのようなデバイスノードを「擬似デバイス({{lang-en-short|pseudo-device}})」と呼ぶ。これらはOSが制御する各種機能を提供する。以下に、よくある擬似デバイスを列挙する。 |
||
;<code>[[/dev/null]]</code>:あらゆる入力を受け付け、それを捨てる。出力はしない。[[ビットバケツ]]の一種。 |
;<code>[[/dev/null]]</code>:あらゆる入力を受け付け、それを捨てる。出力はしない。[[ビットバケツ]]の一種。 |
||
;<code>[[/dev/zero]]</code>:[[ASCII]]のNUL文字(値がゼロ)の列を生成する。 |
;<code>[[/dev/zero]]</code>:[[ASCII]]のNUL文字(値がゼロ)の列を生成する。 |
||
;<code>[[/dev/random]]</code>:可変長の擬似乱数文字列を生成する(ブロックする |
;<code>[[/dev/random]]</code>:可変長の擬似乱数文字列を生成する({{仮リンク|ブロッキング(コンピューティング)|en|Blocking (computing)|label=ブロック}}する))。 |
||
;<code>[[/dev/urandom]]</code>:可変長の擬似乱数文字列を生成する(ブロックしない)。 |
;<code>[[/dev/urandom]]</code>:可変長の擬似乱数文字列を生成する(ブロックしない)。 |
||
=== 慣習的な命名 === |
=== 慣習的な命名 === |
||
以下に列挙したのは、[[Linux]] |
以下に列挙したのは、[[Linuxディストリビューション]]でよく使われるデバイスノード名のプレフィックスである<ref>比較のため http://www.yiluda.net/manual/linux/rute/node21.html を参照。2007年9月4日閲覧{{リンク切れ|date=2022年3月}}</ref>。 |
||
* fd: [[フロッピーディスク]] |
* fd: [[フロッピーディスク]] |
||
39行目: | 38行目: | ||
* par: [[パラレルポート]] |
* par: [[パラレルポート]] |
||
* pt: [[擬似端末]](仮想端末) |
* pt: [[擬似端末]](仮想端末) |
||
* s: [[Small Computer System Interface|SCSI]]デバイス一般。特にハードディスク |
* s: [[Small Computer System Interface|SCSI]]デバイス一般。特に[[ハードディスクドライブ]]。 |
||
* scd: SCSI 接続の音声用光ディスク装置 |
* scd: SCSI 接続の音声用光ディスク装置 |
||
* sd: SCSI 接続のハードディスク |
* sd: SCSI 接続のハードディスク |
||
47行目: | 46行目: | ||
* tty: (物理)[[端末]] |
* tty: (物理)[[端末]] |
||
多くの場合、これらプレフィックスの後に特定の機器に対応した固有の番号が付与される。ハードディスクドライブでは、ドライブを特定する番号の後に[[パーティション]]を特定する番号が付与される。従って例えば、<code>/dev/sda3</code> |
多くの場合、これらプレフィックスの後に特定の機器に対応した固有の番号が付与される。[[ハードディスクドライブ]]では、ドライブを特定する番号の後に[[パーティション]]を特定する番号が付与される。従って例えば、<code>/dev/sda3</code>はディスク上の領域であり、<code>/dev/pts/14</code>に対応してネットワーク経由の端末セッションがある。 |
||
バージョン |
バージョン7以降の[[Fedora]]などのLinuxディストリビューションでは、<code>sd</code>をあらゆるディスクドライブに使っている ([[:en:libATA|libATA]])<ref>{{cite web |url=https://docs.fedoraproject.org/en-US/Fedora/7/html/Release_Notes/sn-Installer.html |title=Installation Notes |accessdate=2022-03-07 |date=2007年5月31日 |publisher=Red Hat, Inc. |work=Fedora 7 Release Notes}}</ref>。 |
||
== MS-DOS == |
== MS-DOS・Windows == |
||
[[MS-DOS]] |
[[MS-DOS]]はUNIXからスペシャルファイルの概念を導入したが、これを'''デバイスファイル'''と呼んだ{{Sfn| MSDOShandbook|1984|p=30,57}}。ごく初期のMS-DOSは[[ディレクトリ]]階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を[[予約語]]にしていた。つまり、特定の[[ファイル名]]がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、[[CP/M]]の[[Peripheral Interchange Program|PIP]]コマンドでの「スペシャルファイル」と互換になるよう選ばれている。これは[[Microsoft Windows|Windows]]にも引き継がれ、'''予約デバイス名'''とも呼ばれる。 |
||
主なものを下の表に示すが、ほかにも予約デバイス名は存在する<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}}{{リンク切れ|date=2022年3月}}</ref> |
|||
主なデバイスファイルを下表に示す。 |
|||
<ref>{{Cite web|和書|author=マイクロソフト|authorlink=マイクロソフト|date=2021-09-23|url=https://docs.microsoft.com/ja-JP/troubleshoot/windows-client/backup-and-storage/fat-hpfs-and-ntfs-file-systems|title=FAT、HPFS、NTFSファイルシステムについて|work=Microsoft のテクニカル ドキュメント|accessdate=2022-03-06}}</ref>。 |
|||
{| class="wikitable" cellpadding=4 |
{| class="wikitable" cellpadding=4 |
||
!ファイル名 |
!ファイル名 |
||
78行目: | 78行目: | ||
|} |
|} |
||
予約語に[[拡張子]]を付与しても同様に予約されたデバイスを意味する。つまり、"nul.doc" や "con.htm" はファイル名ではなく、それぞれNULとCONデバイスと解釈される。 |
予約語に[[拡張子]]を付与しても同様に予約されたデバイスを意味する。つまり、"nul.doc" や "con.htm" はファイル名ではなく、それぞれNULとCONデバイスと解釈される。また、"C:\WINDOWS\CON" などのようにパス名の体を成していても予約デバイス名として扱われる。さらに、MSCDEXとCD-ROMドライバ間で使用するデバイス名も同様に予約デバイス名として扱われる。 |
||
=== 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}}{{リンク切れ|date=2022年3月}}</ref>。 |
|||
== 関連項目 == |
== 関連項目 == |
||
* [[ブロック |
* [[ブロック (データ)]] |
||
* [[バッファ]] |
* [[バッファ]] |
||
* [[ファイルシステム]] |
* [[ファイルシステム]] |
||
88行目: | 91行目: | ||
{{Reflist}} |
{{Reflist}} |
||
== 参考文献 == |
|||
⚫ | |||
* {{Cite book|和書 |
|||
| author=発行者 塚本慶一郎 |
|||
| title=標準MS-DOSハンドブック |
|||
| publisher=株式会社アスキー |
|||
| date=1984-7-10 |
|||
| isbn=4-87148-742-3 |
|||
| ref={{Sfnref| MSDOShandbook|1984}} |
|||
}} |
|||
⚫ | |||
[[Category:OSのファイルシステム]] |
[[Category:OSのファイルシステム]] |
||
[[Category:UNIX]] |
[[Category:UNIX]] |
||
[[de:Devfs]] |
|||
[[cs:Zařízení (soubor)]] |
|||
[[ |
[[es:Device Filesystem]] |
||
[[ |
[[fr:Devfs]] |
||
[[it:DEVFS]] |
|||
[[pt:Arquivo de dispositivo]] |
|||
[[pl:Device Filesystem]] |
2023年12月18日 (月) 00:15時点における最新版
デバイスファイル(英: Device file)またはスペシャルファイル(英: Special file)とは、ファイルシステム上であたかも通常のファイルのような形で提示されるデバイスドライバのインタフェースである。これにより、ソフトウェアが入出力システムコールを通してデバイスドライバを使うことができ、作業が単純化される。
デバイスファイルは、プリンターなどの周辺機器への単純なインタフェースを提供する。また、ディスクパーティションなどの機器上の特定のリソースへのアクセスにも使える。さらに、/dev/nullや擬似乱数生成器といった特定の機器とは対応しないリソースへのアクセスにも使われる。
UNIX・Unix系
[編集]UNIX・Unix系オペレーティングシステム (OS) では、デバイスファイルをデバイスノード(英: device node)とも呼び、キャラクタデバイスとブロックデバイスに分類される。それらは、OSとハードウェアによるデータの入出力方法に違いがある。また、名前付きパイプのように通常のファイルではない(スペシャルな)オブジェクトと区別するため、デバイススペシャルファイルと呼ぶこともある。
実装
[編集]定義上、デバイスノードはOSのカーネルが既に確保済みのリソースに対応している。UNIXではそれらリソースを「メジャー番号」と「マイナー番号」で識別し、それら番号がノードの構造体の一部として格納されている。番号の割り当て方は、OSやプラットフォームによって異なる。一般にメジャー番号がデバイスドライバの識別に使われ、マイナー番号がそのドライバが制御する個々の機器の識別に使われる。この場合、システムはドライバに対して引数としてマイナー番号を渡す。
システムはデバイスノードが通常ファイルであるかのように扱い、標準的なシステムコールを使ってアクセスする。
キャラクタデバイス
[編集]キャラクタデバイス(またはキャラクタスペシャルファイル)は、システムが一文字ずつデータを転送する機器に対応している。キャラクタデバイスは、テレタイプ端末、モデム、仮想コンソール、擬似端末などのようなバイトストリーム型機器を扱い、データのランダムアクセスはサポートしていないのが普通である。
多くの実装では、キャラクタデバイスはバッファを使わない入出力を行う。システムは文字単位に逐次的に読み書きを行う。
ブロックデバイス
[編集]ブロックデバイス(またはブロックスペシャルファイル)は、ブロック形式でデータをやり取りする機器に対応している。ブロックデバイスは、ハードディスクドライブ/CD-ROMドライブ/メモリ領域などのアドレス指定可能な機器を扱う。
ブロックデバイスはランダムアクセスとシークが可能なことが多く、一般にバッファを使った入出力を行う。OSが個々の入出力用に1つのブロックを保持するためのバッファを確保する。プログラムがデータの読み書きを要求すると、システムは適当なバッファを用意してそのデータを保持する。バッファが一杯になると適切な操作(データ転送)が行われ、システムがそのバッファをクリアする。
擬似デバイス
[編集]UNIX・Unix系OSでは、実際の周辺機器とは対応しないデバイスノードもある。そのようなデバイスノードを「擬似デバイス(英: 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
をあらゆるディスクドライブに使っている (libATA)[2]。
MS-DOS・Windows
[編集]MS-DOSはUNIXからスペシャルファイルの概念を導入したが、これをデバイスファイルと呼んだ[3]。ごく初期のMS-DOSはディレクトリ階層をサポートしていなかったため、デバイスファイルを通常のファイルと区別するためにそれらの名称を予約語にしていた。つまり、特定のファイル名がデバイスファイル用に予約されており、同じ名前のファイルやディレクトリを新たに作成できないようになっていた。予約された名称は、CP/MのPIPコマンドでの「スペシャルファイル」と互換になるよう選ばれている。これはWindowsにも引き継がれ、予約デバイス名とも呼ばれる。
主なものを下の表に示すが、ほかにも予約デバイス名は存在する[4] [5]。
ファイル名 | 用途 |
---|---|
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系に予約デバイス名が複数回現れるパスを指定してファイルを開こうとするとシステムがフリーズしてしまうバグが存在したためである[6]。
関連項目
[編集]脚注
[編集]- ^ 比較のため http://www.yiluda.net/manual/linux/rute/node21.html を参照。2007年9月4日閲覧[リンク切れ]
- ^ “Installation Notes”. Fedora 7 Release Notes. Red Hat, Inc. (2007年5月31日). 2022年3月7日閲覧。
- ^ MSDOShandbook 1984, p. 30,57.
- ^ マイクロソフト (2003年5月12日). “MS-DOS Device Driver Names Cannot be Used as File Names” (英語). Microsoftサポート技術情報. 2008年11月30日閲覧。[リンク切れ]
- ^ マイクロソフト (2021年9月23日). “FAT、HPFS、NTFSファイルシステムについて”. Microsoft のテクニカル ドキュメント. 2022年3月6日閲覧。
- ^ マイクロソフト (2007年7月18日). “パスに複数の MS-DOS デバイス名が含まれていると致命的な例外 0E が発生する”. Microsoftサポート技術情報. 2008年11月30日閲覧。[リンク切れ]
参考文献
[編集]- 発行者 塚本慶一郎『標準MS-DOSハンドブック』株式会社アスキー、1984年7月10日。ISBN 4-87148-742-3。