2016-09-03 77 views
0

私はwin8.1でcygwinを実行していましたが、EOFを表すためにCTRL-Zプログラムに入力していました。今日私はwin10にcygwinをインストールし、 "a.out"を実行しました。入力データを入力した後、CTRL-Zを押すと「Suspended」というメッセージが表示され、シェルプロンプトが表示されます。私は同じ結果をbashとcshで試しました。 CTRL-Dも機能しません。シェルを強制終了します。Windows 10のcygwinでEOFとは何か

私は新しいinput.txtファイルを作成し、その中に関連する入力データを入力し、 "a.out < input.txt"を実行して、この問題のみを確認しました。良い。したがって、問題はSTDINのEOFを定義することのみです。

この問題を解決するにはどうすればよいですか?

注:私はこの質問を閉じて、新しい質問などのUnixライクなシステム、オンreading till EOF in java on cygwin on windows-10

+0

ctrl-zは、プロセスを中断するunixコマンドです。あなたはMSYSを考えましたか? ctrl-Dはそこで動作します。 –

+1

キーボードドライバが 'stty -a'でシグナルを生成する方法を調べてください(' cchars'の下に 'eof'を探してください)。 'stty'を使って設定を変更することもできますが、私はそれをお勧めしません。シェルEOFを送信しているため、Ctrl + Dで「シェルを強制終了」します。 'set -o ignoreeof'を使うことができます – cdarke

+0

Jean-Francoise:私はmsysではなくcygwinを使っています。 – R71

答えて

2

に詳細を入れていますCygwinのは、Ctrl-Dは、(デフォルトで)終了をトリガするように構成されていますtty(端末/キーボード)から読み込むときのファイルの状態。 sttyコマンドを使用してこれを変更することは可能ですが、それをやっていないように見えます(ほとんどそうすべきではありません)。

標準入力から読み込むプログラムを実行しているときにCtrl-Dを入力すると、プログラムの終了時に応答する方法によってプログラムが終了する可能性があります。

Ctrl-Zは、現在のプログラム(インタラクティブシェルなどの一部のプログラムは、その信号を処理または無視できる)を中断するシグナルを送信します。 (WindowsはCtrl-Zを使用してファイルの終わりをトリガーします)

説明する動作は、シェルプロンプトでCtrl-Dを入力していることを示しています。これにより、プログラムではなくシェルであり、ファイルの終わりの状態になります。シェルはこれに応答して終了します(デフォルトでは、シェルに無視するようにset -o ignoreeofを使用できます)。

プログラムを実行しているときにCtrl-D と入力すると、ファイルが正しく起動され、ファイルの終了が行われ、プログラムが終了するはずです。

更新:通常は、他の入力の前にCtrl-Dを入力する必要があります(結果として、入力がまったく入力されません)。行の途中でファイルの終わりをトリガーするには、Ctrl-D と入力して、を2回入力する必要があります。 (通常、これは良い考えではありません。プログラムに改行文字が終わっていない部分行があるためです)。

+0

私のラップトップでwin8.1を使ってEOFとして動作するためにCtrl-Zを使用しました。 win10を使った新しいラップトップとcygwinの新しいインストールでは、これはもう動作しません。言われたように、私は今 "set -o ignoreeof"をしました。関連する入力の後でCtrl-Dを押すとCtrl-Dが無視されるようなことはありません。Ctrl-Zを押すと、「Suspended」ではなく「Stopped」というメッセージが表示されます。しかしどちらの方法でも、プログラムはその時点で停止し、期待される出力は表示されません。いいえ、私はsttyを使用していません。 – R71

+0

'stty'(引数なし)の出力は何ですか? –

+0

速度38400ボー;ライン= 0; ixany – R71

関連する問題