それは次のように説明された。このStack Overflowのスレッド各論理端末には「疑似端末」があり、その 1 つに書き込むと、次のようになります。
$ cat some-file.txt > /dev/ttys002
データがそのターミナル ウィンドウに表示されます。ターミナル ウィンドウにファイルのような API を提供する理由は何ですか?これが役立つユース ケースはありますか?
ここまでそのままコピーしました。
擬似端末に限らず、/dev/tty*
同じように。
答え1
ほとんどのハードウェア デバイスは、ファイルのような API を提供しています。これは、オペレーティング システムの設計とアプリケーションの設計の両方を簡素化するためです。OS に必要なのはファイル API だけで、別のターミナル API、別のディスク API、別のサウンド API などは必要ありません。特定の種類のハードウェアに固有の機能を使用していないアプリケーションは、通常のファイルにアクセスしているのか、ハードウェア デバイスにアクセスしているのかを気にせずに、ファイル API を使用できます。
多くのハードウェアには、デバイスの種類に固有の機能があります。アプリケーションはこれらの機能を次のように呼び出すことができます。ioctl一部のハードウェアは、バイト ストリームを単純に読み書きできないため、ファイルとして表示されません。たとえば、Linux では、ネットワーク インターフェイスが個々のバイトではなくパケットで動作するため、ネットワーク インターフェイスをデバイス ファイルとして公開しません。
歴史的に、端末はハードウェア デバイスでした。現在、ほとんどの端末は、グラフィカル環境またはネットワーク経由でエミュレーターによって提供されています。ただし、カーネルにはどの端末でどのプロセスが実行されているかを追跡するための特別な処理が含まれているため、擬似端末であってもハードウェア デバイスのように見えます。
あらゆるUNIX系では、/dev/tty
は「このプロセスの現在の端末」を意味します。言い換えれば、プロセスがそのファイルを開くたびに、そのプロセスの制御端末)。これにより、標準入力および出力記述子がリダイレクトされている場合でも、プロセスは端末を介して対話できるようになります。
各端末には、デバイス ファイル (ハードウェア端末 (tty、たとえばLinux のテキスト モード仮想コンソールの場合は 、、…、または/dev/tty1
Linuxのシリアル ポートの場合は 、…) またはエミュレートされた端末 (Linux の場合は pty、疑似端末の略) のいずれかが関連付けられています。これは、プロセスが端末ドライバーまたはエミュレーターとデータを交換するためのファイルです。/dev/tty2
/dev/ttyS0
/dev/pts/NUMBER
ターミナルはファイルなので、アプリケーションを実行してその出力をターミナルに表示できます。コマンドラインでプログラムを実行すると、デフォルトではその出力はターミナルに送られますが、ファイルにリダイレクトすることもできます。