1

bin/shをシェルとして使用してnetcat経由でLinuxボックスにアクセスしています。私は小さなプログラムをコーディングしました。以下を抜粋してください。

printf("Enter command to exec \n");

fgets(abc,128,stdin);

....

何が起こっているのかというと、netcatを介してシェル内でプログラムを実行すると、実際にプログラムを終了するまで、「システムに送信するコマンドを入力してください」が出力されません。

./programの後に画面に最初に表示されるはずですが、奇妙なことに、実行時にprintfコマンドをスキップするかのように入力を受け取ります。私の入力はシステムに正常に送信されます(そして出力を印刷します)が、それ以外の場合は画面が空白になり、コーディングしたprintfsが表示されません。

ただし、プログラムを終了すると、シェルに戻る前に、すべてのprintfsが実際に(バッファリングされているかのように)表示されます。なぜこれが起こるのかについて何か考えはありますか?さらに情報が必要な場合はお知らせください。喜んでスレッドを更新します。

どうもありがとうございます

4

1 に答える 1

2

端末stdoutでは通常、行バッファリングされています。文字が印刷されるようにするにはfflush(stdout)、新しい行を印刷するか、印刷する必要があります。'\n'

非インタラクティブデバイスでは、ストリームはフルバッファリングされることが多くstdout、文字を印刷するにはフラッシュする必要があります。

printf("Enter command to send to system \n");
fflush(stdout);
于 2012-02-03T22:10:40.883 に答える