2017-01-27 13 views
1

をされて使用して供給されたときに期待どおりに動作しません:予想通りCプログラムは、標準入力が短いCプログラムをここで猫

次のプログラムが実行され、 cmdの値は、キーボードを使って入力される
#include<stdio.h> 

int main (void){ 

    char cmd; 

    while(scanf("%c", &cmd) != EOF){ 

     if(cmd == 'q'){ 
      printf("Thanks\n"); 
      return 0; 
     } 
    } 

return 0; 
} 

、すべてが動作します。私はパイプにcatを使用して入力をしようとしていたときにqが入力されたときに

$ ./catproblem 
q 
Thanks 
$ 

しかし、プログラムはすぐに終了しません。何らかの理由で他の入力を待ってから終了します。

$ cat | ./catproblem 
q 
Thanks 
anything 
$ 

この現象は何の原因ですか?そして、これは修正することができますので、catを入力に使用すると、プログラムは正常に動作しますか?

答えて

4

catは終了せず、シェル(bash)はパイプライン内のすべてのプロセスが終了してから処理を続けるのを待ちます。 anythingと入力すると、catはパイプへの書き込みを試み、SIGPIPE信号を取得して終了します。

+0

これは意味があります。説明をありがとう! –

関連する問題