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

时间:2014-08-26 22:48:33

标签: c linux bsd

假设STDOUT_FILENOstdout文件描述符与1stdout need not be a modifiable lvalue)不同吗?

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

1 个答案:

答案 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。