質問
作成したプログラム以下の構文でシェルに与えることを考えます。
./a.out < test.txt
その際、"test.txt"の終端EOFを読み取ってプログラムを終了したいのですが、どうすればよいでしょうか?
現状
C
1int main(){ 2 char buf[1024]; 3 char prompt[NAMESIZE] = "Command: "; 4 for(;;){ 5 printf("%s", prompt); 6 if(fgets(buf, 1024, stdin) == NULL){ 7 exit(0); 8 } 9 (以下、入力がきちんと与えられたときの処理) 10 } 11 return 0; 12}
入力のリダイレクトに対応するため、if(scanf("%1023s", buf) == EOF){
のブロックを追加したのですが、ファイルの終端でもプログラムが終了しません。
test.txtの内容
pushd
dirs
cd
ls *
alias sl ls
popd
sl -l
と書いているのですが、上から6行はきちんと読み取れていることを確認していますが、
7行目は「sl -lushd」
となる上、無限ループが終了しません。
さらに、(架空の8行目?として)dirsが読み取られています。…以下同様に無限ループが終了しない
回答4件
あなたの回答
tips
プレビュー