Linux システムには、キャラクター デバイス、ブロック デバイス、ネットワーク デバイスという 3 つの主なタイプのデバイスがあります。データ処理とアクセス パターンにいくつかの違いがあります。
-
キャラクターデバイス:
- バイト単位で入出力を行うデバイスをキャラクタデバイスと呼びます。たとえば、キーボード、マウス、シリアル ポートなどです。
- キャラクター デバイスはデータをストリームとして読み書きし、データへのランダム アクセスは行いません。
- キャラクタ デバイスは通常、バッファリング動作を行います。つまり、1 つのパスで複数のバイトを読み書きできます。
-
ブロックデバイス:
- ブロック単位(通常は512バイト以上の固定サイズ)で入出力を行うデバイスをブロックデバイスと呼びます。たとえば、ハードディスク、ソリッド ステート ディスクなどです。
- ブロック デバイスはランダム アクセスをサポートしており、特定のブロックへのデータの読み書きが可能です。
- ブロック デバイスは通常、ファイル システムによって管理され、キャッシュを使用してパフォーマンスを向上させます。
-
インターネット機器:
- ネットワーク デバイスは、イーサネット カード、ワイヤレス ネットワーク カードなど、ネットワークを介したデータ通信に使用されます。
- ネットワーク デバイスは、物理ネットワークを通じてデータを送信し、ネットワーク プロトコル (TCP/IP など) を使用してデータ パケットを送受信します。
- ネットワーク デバイスは、リモート データ送信をサポートするネットワーク通信機能を提供します。
これらのデバイス タイプには、管理および制御するための対応するドライバーが Linux カーネル内にあります。デバイスの種類ごとに特性と動作モードが異なるため、デバイスをプログラミングおよび構成する際にはその違いを理解する必要があります。例えば、
キャラクターデバイスで読み書きする場合、read()
とwrite()
システムコールを使用できます。
ブロック デバイス上でread()
と を使用することwrite()
は引き続き有効ですが、データ アクセスにはファイル システム インターフェイス ( open()
、read()
、など) を使用する方が一般的です。write()
ネットワークデバイスのプログラミングでは、通常、ネットワーク通信を実現するためにソケット(Socket)APIを使用します。