stdin
:一般的な標準入力(の略stdin
)はキーボードから来ます。
stdin
入力するときは(標準入力端子)に入力してください。標準入力デバイス(通常はキーボード)を使用しますが、Linuxではファイルから標準入力を取得することもできます。
たとえば、
cat < myfirstscript
cat
これは、キーボードではなくファイルから入力を受け取るように指示しますmyfirstscript
(もちろん:)と同じですcat myfirstscript
。
cat
基本的に、これはコマンド()への入力が予想される場所(キーボード)から出てこなくてもファイルから出るという事実につながります。
混乱しています。 (キーボード)から来なければなりませんが、今はファイルから来ています。
キーボードでファイル(例:)を入力してもcat myfirstscript
ファイルではありませんか?
答え1
通常、標準入力(「stdin」と呼ばれる)はキーボードから提供されます。
このような状況はまれです!たとえば、コンピュータを起動すると、最初の文字を入力する前に、キーボード以外の場所から標準入力を読み取るための何千ものプロセスがすでに実行されています。 :)
何かを入力するときは、stdin(標準入力端子)に入力します。
いいえ、キーボードに入力すると、カーネルドライバはこれらの入力イベントを理解し、キー入力コードに変換してからpseudo-ttyを介して一部の端末エミュレータに送信されます。
ターミナルエミュレータは、オプションで実行されるプログラムの標準入力をこのPTTYに接続できます。
(もちろんこれはcat myfirstscriptと同じです)。
しかし、それは本当です。cat
これは、渡された引数が開かれ、使用されるファイルとして解釈されるためです。代わりに標準入力。
これを行うときにcat < myfirstscript
シェルに1.ファイルを開きmyfirstscript
(ファイル記述子を取得するために)2.実行するように指示するcat
とstdin
、ストリームは開かれたファイル記述子に置き換えられます。
したがって、効果は同じですが、メカニズムは完全に異なります!
本質的に、これはコマンド(cat)への入力が予想されるソース(キーボード)から出るのではなく、ファイルから出るという事実に起因します。
cat
入力ストリームについては何も「予想」されません。特にキーボードから来るものではありません(cat
キーボードデバイスはまったく処理できません。ターミナルでキーを押すと次のように変換する必要があります)。数値)。
キーボードからファイルを入力するとき(例:cat myfirstscript)。同じファイルではありませんか?
いいえ。