没有从printf到文件描述符C



当我运行此

close( 2 );
fd = open( "newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600 );
fprintf( stderr, "ERRORn" );
close( fd );

它将错误放在newfile中。

但是,当我运行这个

close( 1 );
fd = open( "newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600 );
printf( "OUTPUTn" ); //fprintf( stdout, "OUTPUTn" );
close( fd );

什么也没有发生。newfile确实在文件描述符1中打开,但是printf不会通过。

我缺少什么吗?

我需要致电

fflush( stdout );

要冲洗缓冲区1到文件。

您将文件描述符从FILE *下方更改,因此很自然会发生奇怪的事情。通常,最好避免这样做,或者如果您必须更改文件描述符,

  • 使用opendup2close代替closeopen,以表明您正在替换文件描述符,

  • 在使用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("OUTPUTn");
// If you really need to close it later...
fflush(stdout);
close(STDOUT_FILENO);

相关内容

  • 没有找到相关文章

最新更新