最后一节
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
if ((fp = fopen("output.txt", "w")) == NULL)
{
perror("打开文件失败,原因是");
exit(EXIT_FAILURE);
}
fputs(" I love you!\n", fp); //至此fputs写入的东西是放在IO缓冲区的,并没有写入到文件中去
getchar(); //阻塞函数,知道函数调用才会结束程序
fclose(fp); //不输入字符,不会到这一步。
// 等输入任意字符,关闭文件,缓冲区的东西才被写入进文件中
}
return 0;
想要不经缓冲区,可以使用fflush函数
标准IO提供的三种类型的缓冲模式
——按块缓存
——按行缓存
——不缓存
按块缓存也成全缓存,即在填满缓冲区后才进行实际的设备读写操作;按行缓存是指在接收到换行符‘\n’之前,数据都是先缓存在缓冲区的;最后一个是不缓存,也就是允许你直接读写设备上的数据。
可以使用setvbuff来指定缓存模式
#include <stdio.h>
#include <string.h>
int main(void)
{
char buff[1024];
memset(buff, '\0', sizeof(buff));
setvbuf(stdout, buff, _IOFBF, 1024); //_IOFBF为块缓冲区,如果改成IONBF则会全部打印!
fprintf(stdout, "Welcome to China!\n");
fflush(stdout); //上面Welcome to China被强制刷新到输出上去
fprintf(stdout, "输入任意字符后才会显示这一行!\n");
//而这个字符串被放到缓冲区中等待getchar()函数调用后送到输出上
getchar();
return 0;
}