Ctrl+D ターミナルライン入力終了

Ctrl+D ターミナルライン入力終了

もし私がするなら

$ cat > file.txt

テキスト - -CtrlDCtrlD

Q1:Enterキーを押さないと、なぜCtrl- をD2回押すのですか?

もし私がするなら

$ cat > file.txt

パバンプシュCtrl-Z

[2]+  Stopped         cat > file.txt
$ cat file.txt
$ cat > file.txt

パンです。

Ctrl-Z

[2]+  Stopped         cat > file.txt
$ cat file.txt
pa bam pshhh

2番目のファイルにはなぜ1行しかありませんか?

ベストアンサー1

Unixで読み書き可能なほとんどのオブジェクト(通常のファイル、パイプ、端末、RAWディスクドライブ)はファイルのように設計されています。

プログラムは、cat次のように標準入力を読み込みます。

n = read(0, buffer, 512);

512バイトが必要です。n実際に読み込んだバイト数、またはエラーが発生した場合は-1です。

通常のファイルに対してこの操作を繰り返すと、512バイトの読み取りが大量に発生し、ファイルの末尾で少し短い読み取りが行われ、ファイルの終わりを過ぎて読み取ろうとするとゼロになります。したがって、<= 0になるcatまで実行されます。n

端末で読むのは少し異なります。行を入力すると、Enterキー押下が終了し、readその行のみが返されます。

一部の特殊文字を入力できます。一つはCtrl-D。このコマンドを入力すると、オペレーティングシステムは、ユーザーがCtrl-D入力したすべての現在の行(それ自体ではない)を読み取りを実行するプログラムに送信します。これは日常的なことです。それがCtrl-D行の最初の文字であれば、プログラムは長さゼロの行に送られます - プログラムがそれが通常のファイルの終わりに達したことを確認するのと同じです。cat 別のことをする必要はありません、通常のファイルから読み込んだり、端末から読んだりしても構いません。

別の特殊文字はですCtrl-Z。 1行の任意の場所に入力すると、オペレーティングシステムは以前に入力した内容をすべて破棄し、プログラムにSIGTSTP信号を送信します。これにより、プログラムは通常プログラムを停止(一時停止)し、制御をシェルに返します。

だからあなたの例では

$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+  Stopped         cat > file.txt

破棄されたいくつかの文字を入力し、cat出力ファイルに何も書き込むことなく停止します。

$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+  Stopped         cat > file.txt

行を入力すると、その行は出力catファイルを読み書きして停止Ctrl-Zしますcat

おすすめ記事