当我运行时
close( 2 );
fd = open( "newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600 );
fprintf( stderr, "ERROR\n" );
close( fd );
它将ERROR放入newfile。
但是当我运行这个
时close( 1 );
fd = open( "newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600 );
printf( "OUTPUT\n" ); //fprintf( stdout, "OUTPUT\n" );
close( fd );
什么都没发生。 newfile确实在文件描述符1中打开,但是printf没有通过。
我有什么遗失的东西吗?
答案 0 :(得分:1)
您正在从FILE *
下改变文件描述符,因此奇怪的事情发生是非常自然的。一般来说,最好不要这样做,或者如果你必须更改文件描述符,
使用open
,dup2
,close
代替close
,open
以明确您正在替换文件描述符,
在使用stdio
之前,请在程序的最开头进行所有更改。
如果您仍想弄乱文件描述符,请按以下步骤操作:
int fd = open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600);
if (fd == -1) {
err(1, "newfile.txt");
}
fflush(stdout);
int r = dup2(fd, STDOUT_FILENO);
if (r == -1) {
err(1, "dup2");
}
close(fd);
printf("OUTPUT\n");
// If you really need to close it later...
fflush(stdout);
close(STDOUT_FILENO);
答案 1 :(得分:0)
我需要致电
fflush( stdout );
将缓冲区1刷新到文件中。