This question already has answers here:
Closed 2 years ago.
Difference between fclose and close
(4个答案)
我想将STDOUT重定向到磁盘上的一个文件。关键是让printf在我的程序中写入一个文件,而不是控制台。
我在网上看到一些文章,他们用的是:
或:
在每一个教程中,他们都使用close()并且它确实有效。但我很好奇,我尝试使用fclose(stdout),但当我尝试使用printf时发生了一些错误:
错误:
我的问题是,为什么fclose()不起作用,而close()起作用?
谢谢。
(4个答案)
我想将STDOUT重定向到磁盘上的一个文件。关键是让printf在我的程序中写入一个文件,而不是控制台。
我在网上看到一些文章,他们用的是:
dup2(fileno(outputFile), STDOUT_FILENO);
或:
close(STDOUT_FILENO);
dup(fileno(outputFile));
在每一个教程中,他们都使用close()并且它确实有效。但我很好奇,我尝试使用fclose(stdout),但当我尝试使用printf时发生了一些错误:
fclose(STDOUT_FILENO);
dup(fileno(outputFile));
错误:
Bad file descriptor
我的问题是,为什么fclose()不起作用,而close()起作用?
谢谢。
最佳答案
STDOUT_FILENO
是一个数字文件描述符(通常为1
)。使用close
时,释放描述符,然后使用dup2
重新分配它。该描述符的任何输出现在都将转到新文件。
另一方面是一个包含文件描述符的排序对象。将stdout
格式输出到与FILE*
相关联的缓冲区,然后将缓冲区转换到描述符(取决于缓冲模式)。当您printf
aFILE
时,它(通常)是底层描述符,并释放write
对象。fclose
不加压,因此FILE*
失败。
关于c - fclose(stdout)vs close(STDOUT_FILENO)-C ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40834844/
10-11 01:53