假设STDOUT_FILENO
,stdout
文件描述符与1
(stdout
need not be a modifiable lvalue)不同吗?
例如,freopen("/dev/null", "w", stdout)
可以更改fileno(stdout)
结果吗?
答案 0 :(得分:9)
测试程序:
#include <stdio.h>
int main() {
fclose(stdin);
freopen("stdout.txt", "w+", stdout);
fprintf(stderr, "%d\n", fileno(stdout));
return 0;
}
在我的机器上打印0(OS X 10.9.4)。
文件描述符通常从最低编号开始重复使用。通过关闭stdin
,文件描述符0被释放,随后的freopen
将在打开文件时使用文件描述符0。