関数 popen を使用して stdout を再割り当てするプログラムが printf 関数で失敗することに気付きました
コード:
# include <stdio.h>
int main(int argc, char * argv[])
{
FILE * tmp = stdout;
char * command = "cat > newfile.txt";
double a=12.2344;
stdout = popen( command, "w"); /* permitted according to glibc tutorial */
printf("That was laddy\n"); /* This doesn't go to newfile.txt !!!*/
fprintf(stdout, "And his lass\n"); /* but This goes */
/* but this...... */
printf("A double number: %.2f\n", a); /* unexpectedly goes where the
first printf hasn't gone */
/* is it a bug or there is something wrong in a code ? */
pclose(stdout);
stdout = tmp;
return 0;
}
関数printfとは何ですか?一度は tty に出力されますが、次回はファイル 'newfile.txt' (本来あるべき場所) に出力されます。glibc のバグですか、それとも上記のコードの間違いですか。ユーティリティ プログラムでそのリダイレクトを使用します。提案をありがとう。