這裏是我的代碼:爲什麼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