これは、いくつかのものをテストした後に書いたcコードの一部です。
これが脆弱性の問題ではないことはわかっていますが、プログラムが正常に戻った後、プロンプトが stdin、stdout、stderr に戻った時点で stdin がフラッシュされない理由がわかりません。プログラムの通常の実行が終了した後、標準入力の残りの文字が標準出力にリダイレクトされ、フラッシュされないのはなぜですか?
$cat dummy.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
int main(){
char rbuf[100];
if (read(0, rbuf,5) == -1){
perror("learn to count");
printf("errno = %d.\n", errno);
exit(1);
}
//printf("rbuf : %s\n",rbuf);
return 1;
}
ここで実行:
$ gcc -o dummy dummy.c
$ ./dummy
AAAAA /bin/sh
$ /bin/sh
sh-3.2$ exit
exit
$
これは、プロンプトである mew stdout に出力された stdin の残りの文字列にすぎないと思います。最後に改行を追加すると、ユーザーがコマンドを実行するために押したエンターを何らかの方法でエミュレートします。どうしたの?私はそれについてもっと知りたいと思っています。