在POSIX系统上`fileno(stdout)!= 1`可能吗?

可以stdout文件描述符不同于1STDOUT_FILENO )假设stdout不需要是一个可修改的左值 ?

例如,可以freopen("/dev/null", "w", stdout)更改fileno(stdout)结果?

Solutions Collecting From Web of "在POSIX系统上`fileno(stdout)!= 1`可能吗?"

是。

测试程序:

 #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。