コマンドラインでEOF文字を提供する

コマンドラインでEOF文字を提供する

コマンドプロンプトで文字を読み取り、EOFを確認してプログラムを終了しています。ただし、+
コマンドを実行するとEOFとは見なされません。どうするか具体的に説明してください。CtrlD

Ctrl+ がC動作している場合、プロセス全体が終了します。

答え1

tty "cooked"モードを想定すると - ライン入力処理を終了し、入力されたデータをアプリケーションに送信するようにctrl機能します。Dしたがって、「abc」の後に-を入力すると、ctrlこのD3バイトがアプリケーションに送信されます。

さて、アプリケーションは通常ファイルの終わりをどのように決定しますか?読み取りがゼロバイトを返す場合は、EOFと見なされます。したがって、読み取りがゼロバイトを返すようにする必要があります。最初にクリックしenterてからctrl- を押すと、D入力したすべての内容が改行でアプリケーションに送信されます。その後、ctrl入力したDすべてのデータ(つまり、データなし!)がアプリケーションに送信され、ゼロバイトが読み取られ、EOFと見なされます。

クリックするenter前に何も入力すると、アプリはそのキーストロークを受け取り、さらに待ちます。したがって、最初にクリックせずにEOFを生成するには、連続してダブルクリックします。ctrlDenterctrlD

したがって、あなたの質問に答えるには、[次へ]をクリックしてください。ctrl- をクリックする前に(新しい行に加えて)最初に文字を入力しましたかD?それでは、連続して2回試してみてください。

たとえば、次を使用してこれを実行できます。

$ wc -l
test123     0     1     7

(次をクリックctrl- ダブルクリック)Dtest123

このwcユーティリティは、読み取った行、単語、および文字数を表示します。改行文字を入力しなかったため、行数は0で、行数test123は1単語、7文字の長さです。

答え2

「EOF文字」はありません。 Ctrl-D は、端末ドライバによってファイルの末尾に変換されます。状況、そのコンテンツを読みたいすべての人に送信されますread(2)。これはttyのあるモードによって異なり、以前の議論はクッキングモードに適用されます(ドライバはラインを収集し、制限された形式のライン編集を許可し、ライン全体をリーダーに送信します)。 Cooked モードはデフォルトモードで、キーボードから読み取るほとんどのプログラムで使用されます。生モード(たとえば、すべての権限を取得するように設定されたエディタvi(1)または他のエディタ)では、プログラムは入力されたすべての文字を正確に取得します。

関連情報