这是我的代码:
#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() 而不是 write() 系统调用将“堆栈溢出”打印到文件中。
它没有将内容打印到文件中。但我观察到的一件事是,如果我删除代码:
close(newfd)
它按预期将内容打印到文件中。但我不明白为什么。我打印了内容,然后只有我关闭了 newfd。
这是什么原因?