其他
那些奇奇怪怪的缓冲问题
更改缓冲类型
指向终端设备的流是行缓冲的 标准错误是不带缓冲的 指向文件的流是全缓冲的 ……
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
#include<stdio.h>
#include<unistd.h>
int main(void)
{
setbuf(stdout,NULL);
printf("bianchengzhuji");
sleep(10);
return 0;
}
//网址:https://www.yanbinghu.com
#include<stdio.h>
#include<unistd.h>
int main(void)
{
setvbuf(stdout,NULL,_IONBF,0);
printf("bianchengzhuji");
sleep(10);
return 0;
}
fputs没有及时输出
看看下面的例子:
//网址:https://www.yanbinghu.com
#include<stdio.h>
#include<unistd.h>
int main(void)
{
//setbuf(stdout,NULL);
fputc('a',stdout);
sleep(10);
return 0;
}
printf打印的日志没有输出
fflush之后文件还是丢失了
文件内容写完后,fflush了,内容也有了,然后完成后,系统马上复位,复位起来后,文件内容还是丢失了 解压一个压缩包,解压成功,系统复位后,还是发现文件大小为0,文件丢失了
fsync/sync函数 sync命令
总结
相关精彩推荐