为什么fprintf
在以下示例程序中给出不同的结果?
int main(){
FILE *f;
char buf[512];
char name[128] = {"filename"};
f = fopen(name, "w");
fprintf(f, "asdas\n");
fprintf(f, "asdas\n");
while(1){}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用CTRL+ 终止此程序C,我会得到一个名为的空文件filename
.
但是,使用
int main(){
FILE *f;
char buf[512];
char name[128] = {"wpa_supplicant.conf"};
f = fopen(name,"w");
while(1){
fprintf(f, "asdas\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用CTRL+ 终止这个程序C,我得到文件命名filename
,它包含许多带字符串的行asdas
.
为什么在第一个示例中字符串没有写入文件,但是在第二个示例中它们被写入文件?
在第二种情况下,有足够的fprintf
调用将内部缓冲区刷新到磁盘.
对于第一个程序,如果fflush(f)
在while
循环之前放置一个,则字符串将被写入文件.
#include <stdio.h>
int main(void) {
FILE *f = fopen("filename", "w");
if (!f) {
perror("Failed to open 'filename' for writing");
exit(EXIT_FAILURE);
}
fprintf(f, "asdas\n");
fprintf(f, "asdas\n");
if ( fflush(f) != 0 ) {
perror("Flushing output failed");
exit(EXIT_FAILURE);
}
while(1){}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
C:\...\Temp> cl file.c Microsoft (R) C/C++ Optimizing Compiler Version 18.00.31101 for x64 ... /out:file.exe C:\...\Temp> file ^C C:\...\Temp> type filename asdas asdas
记住:
成功完成后,
fflush()
应返回0
; 否则,它应设置流的错误指示,返回EOF
,并设置errno
为指示错误.
归档时间: |
|
查看次数: |
240 次 |
最近记录: |