
コマンドプロンプトで文字を読み取り、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)
または他のエディタ)では、プログラムは入力されたすべての文字を正確に取得します。