那些奇奇怪怪的缓冲问题
更改缓冲类型
-
指向终端设备的流是行缓冲的 -
标准错误是不带缓冲的 -
指向文件的流是全缓冲的 -
……
void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream,char *buf, int mode, size_t size);
-
stream FILE *类型,文件指针 -
buf 缓冲区指针 -
mode 缓冲模式,包括_IOFBF(全缓冲),_IOLBF(行缓冲),_IONBF(不带缓冲) -
size 缓冲区大小
setbuf函数中,如果buf设置为NULL,则缓冲关闭;否则指向长度为BUFSIZ长度的缓冲区,并且是行缓冲。
//网址:https://www.yanbinghu.com
#
#
int main(void)
{
setbuf(stdout,NULL);
printf("bianchengzhuji");
sleep(10);
return 0;
}
//网址:https://www.yanbinghu.com
#
#
int main(void)
{
setvbuf(stdout,NULL,_IONBF,0);
printf("bianchengzhuji");
sleep(10);
return 0;
}
fputs没有及时输出
看看下面的例子:
//网址:https://www.yanbinghu.com
#
#
int main(void)
{
//setbuf(stdout,NULL);
fputc('a',stdout);
sleep(10);
return 0;
}
printf打印的日志没有输出
fflush之后文件还是丢失了
-
文件内容写完后,fflush了,内容也有了,然后完成后,系统马上复位,复位起来后,文件内容还是丢失了 -
解压一个压缩包,解压成功,系统复位后,还是发现文件大小为0,文件丢失了
-
fsync/sync函数 -
sync命令