私は次のサンプルプログラムを持っています:
#include <stdio.h>
int
main(int argc, char ** argv){
char buf[100];
printf("Please enter your name: ");
fflush(stdout);
gets(buf);
printf("Hello \"%s\"\n", buf);
execve("/bin/sh", 0, 0);
}
私とパイプなしで実行すると、正常に動作し、shpromtを返します。
bash$ ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
testName
Hello "testName"
$ exit
bash$
しかし、これはパイプでは機能しません。その理由はわかっていると思いますが、解決策を見つけることはできません。以下の実行例。
bash$ echo -e "testName\npwd" | ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
Hello "testName"
bash$
これは、EOFを受信し、エラーメッセージなしですぐに終了するような方法でgets空になるという事実と関係があると思います。stdin/bin/sh
getsしかし、パイプを介して入力を供給してもpromtを取得できるように、(可能であればプログラムを変更せずに、そうでない場合は削除せずに)これを回避するにはどうすればよいですか?
PS私はこれをFreeBSD(4.8)マシンDSで実行しています