printf命令在关闭仍在外部文件中调用的文件描述符之前

时间:2012-01-07 19:30:04

标签: c system

我编写了这段代码,让我的双手处理系统调用。我希望第一个printf在控制台中显示结果..但是它们都显示给定的文件位置..

#include<stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

void main(){
printf("Hello World!!! Before close\n");
close(1);
int fd = open("/home/abhishek/Desktop/example.txt",O_RDWR);
printf("Hello World!!! After close");
}

实际上哪里出错?

1 个答案:

答案 0 :(得分:2)

stdout的输出可以被缓冲,并且在刷新或关闭流之前不会实际写入底层文件描述符。尝试:

fflush(stdout);
close(1)之前

请注意,混合stdio和系统文件描述符操作通常不是一个好主意。使用其中一种,否则您可能会出现如您所示的混乱行为。