Linuxの世界では、ユーザー空間プログラムがすべてのハードウェアデバイスと通信するためのファイルがあることを学びました。たとえば、デバイスのファイルは次のようになります。
ハードディスク:
/dev/sd*
CDおよびDVDドライブ:
/dev/sr*
PATAハードドライブ:
/dev/hd*
ターミナル:
/dev/tt*
と/dev/pts/*
/dev/tty
シリアルポート:
/dev/ttyS*
パラレルポート:
/dev/lp0
および/dev/lp1
オーディオ機器
/dev/snd/*
:/dev/dsp/
等dev/audio
私の理解は、
Windowsとは異なり、Linuxの世界では、ファイルシステムはファイルの保存に加えてIO通信にも使用されます。
だから、デバイスドライバそのハードウェアデバイスの場合、そのファイルのデータは実際に入力されます(たとえば、/dev/sd*
)これは実際にデバイスから送受信されたデータです。これにより、ユーザー空間プログラムはこれらのファイルを使用してデバイスから読み書きできます。例えば、以下はCを使用したユーザ空間プログラムです。
int fd;
struct termios *oldser,*newser,*oldter,*newter;
oldser=(struct termios *)malloc(sizeof(struct termios));
newser=(struct termios *)malloc(sizeof(struct termios));
oldter=(struct termios *)malloc(sizeof(struct termios));
newter=(struct termios *)malloc(sizeof(struct termios));
fd=openSerial("/dev/ttyS1");
setSerial(fd,oldser,newser);
/* next stop echo and buffering for stdin */
tcgetattr(0,oldter);
tcgetattr(0,newter); /* get working stdtio */
質問:
言うと、すべてはファイルまたはプロセスです。、
これは、Linuxカーネル(またはUNIX)でIOを実行するためにファイルを使用することの上記の理解を意味しますか?私の言葉を訂正してください。
答え1
Linuxの世界では、ユーザー空間プログラムがすべてのハードウェアデバイスと実際に通信するには、そのファイルと通信する必要があることを理解しています。
これはUnixパラダイムですが、Linuxでは常に正しいとは限りません。 (私は生のUnixに慣れていませんが、Linuxでもそうだと思います。)
Windowsとは異なり、Linuxの世界では、ファイルシステムはファイルの保存に加えてIO通信にも使用されます。
まさか。たとえば、匿名パイプにはファイルシステムがなく、名前付きパイプを使用してもデータ自体はファイルシステムを通過しません。
したがって、ハードウェアデバイスのデバイスドライバは実際にそのファイル(たとえば/ dev / sd *)にデータを入力します。
しかし、実際にはそうではありません。充填材ファイルの場合、特殊ファイルの読み取り/書き込み/ioctlのみを処理します。ファイルシステムでは、これらの操作を見ることはできません。
すべてがファイルまたはプロセスと呼ばれる場合、これはLinuxカーネル(またはUNIX)でファイルを使用してIOを実行する方法ですか?
一種の。パラダイムは、ディスクから読み書きする別の機能を持つのではなく、ファイルを処理できるプログラムにディスクを渡すためにファイルインタフェースを実装する必要があることです。たとえば、ディスク処理に特定のコードがない場合でも、hexdump
ディスクの内容にアクセスできます。hexdump