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

jfs*_*jfs 7 c linux bsd

可以stdout文件描述符不同1(STDOUT_FILENO)假设stdout不必修改的左值

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

nne*_*neo 9

是.

测试程序:

#include <stdio.h>

int main() {
    fclose(stdin);
    freopen("stdout.txt", "w+", stdout);
    fprintf(stderr, "%d\n", fileno(stdout));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这在我的机器上打印0(OS X 10.9.4).

文件描述符通常从最低编号开始重复使用.通过关闭stdin,文件描述符0被释放,随后freopen将在打开文件时使用文件描述符0.