奇妙な制御行動

奇妙な制御行動

cat以下を実行して、非常に単純なテキストエディタとして使用できますcat > foo.txt
次に、次のように入力します。

bar
baz

ctrl次に+を押すと、D次のようになります。

$ cat > foo.txt
bar
baz^D

カーソルを上に置きます^。もう一度押すとファイルが保存されます。ただし、別のボタンを押すと(何もないかもしれませんが、ほとんどは何も押さない)、ファイルの編集を続けます。

これは正常な行動ですか?

答え1

はい。それはそれに関連しています^D:それは単に現在のread(2)通話を停止します。

プログラムがこれを行い、中間キーをint rdbytes = read(fd, buffer, sizeof buffer);押すと、現在のバッファから読み取られたバイトが返され、そのバイト数が返されます。行が終了しても同じことが起こります。常に最後の行が渡されます。^Dread()\n

したがって、returnは、^D行の先頭または他の行の後にのみEOFを表す意図された効果を^D持ちます。read()0

答え2

はい、これは通常の動作です。単一の Control-D は通常、行の先頭でのみ中断されます。終了するにはCtrl-Dを押します。

$ cat > foo.txt
bar
baz
^D

関連情報