centos_71 发表于 2015-02-02 22:12

发现close(1)和fclose(stdout)效果并不一样,为什么?

我写了一个小程序:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
    int fd=open("/dev/stdout", O_WRONLY);
    fclose(stdout);//close(STDOUT_FILENO);
    dup(fd);
    stdout=fdopen(fd,"w");
    printf("haha\n");
    return 0;
}
它什么也不输出,但是如果我去掉fclose(stdout)改为close(STDOUT_FILENO),那么程序就能运行输出haha
这是为什么呢? man fclose说了这个fclose()内部会调用close()来关闭相应的fd,那么和close(1)的效果应该一样才对啊。

但是在我的centos6上面就是不一样的运行结果。这是为什么呢?
谢谢
页: [1]
查看完整版本: 发现close(1)和fclose(stdout)效果并不一样,为什么?