这里是我的代码:为什么close()系统调用刷新输出?
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
int main(int argc,char *argv[])
{
int oldfd;
int newfd;
if(argc!=2)
{
printf("Usgae : %s file_name\n",argv[0]);
exit(0);
}
oldfd=open(argv[1],O_RDWR|O_APPEND,S_IRWXU); // Opening the file in Read/Write mode
if (-1 == oldfd)
{
perror("Error opening file");
exit(0);
}
close(1); // closing stdout
newfd=dup(oldfd); //Now this newfd holds the value 1
close(oldfd); //closing the oldfd
printf("\nStack Overflow"); //Now this printf will print content into the file as stdout closed already
close(newfd);// closing newfd
return 0;
}
什么我其实想做用printf只是打印“堆栈溢出”到文件(),而不是写()系统调用。
它不会将内容打印到文件中。但有一件事我观察到的是,如果我的代码删除:
close(newfd)
它的打印内容到文件的预期。但我不明白为什么。我打印了内容,然后只关闭了newfd。
这是什么原因?
例如,为了不太频繁地写入磁盘。效率。 – Beginner
为什么不使用'fprintf(fd,fmt,...)'?我不确定试图重用fd = 1是一个好主意,甚至是定义。 – jedwards
杰德华兹,我其实是想知道为什么这不工作:) – Dinesh