linux printf 刷新,linux下printf中\n刷新缓冲区的疑问(已解决)
#include?
#include?
int?main(void)
{??????????printf("hello?world");
close(STDOUT_FILENO);??????????return?0;
}//什么都不輸出12345678910111234567891011
#include?
#include?
int?main(void)
{?????????printf("hello?world\n");
close(STDOUT_FILENO);?????????return?0;
}//hello?world12345678910111234567891011
通過(guò)上面的兩個(gè)程序已經(jīng)證明在linux下,“\n”確實(shí)對(duì)緩沖區(qū)有強(qiáng)制刷新的作用
#include?
#include?
#include?
#include?
#include?
#include?
int?main(void)
{??????????int?fd;
close(STDOUT_FILENO);
fd?=?open("hello",?O_CREAT|O_RDWR,?0644);??????????if(fd?
perror("open");??????????????????exit(0);
}??????????printf("Nice?to?meet?you!\n");??????????//fflush(stdout);
close(fd);??????????return?0;
}123456789101112131415161718192021123456789101112131415161718192021
但是第三段代碼,當(dāng)沒(méi)有fflush函數(shù)強(qiáng)制刷新的時(shí)候,hello文件里面沒(méi)有“Nice to meet you!”,在加上fflush函數(shù)之后,hello文件中就有“Nice to meet you!”了。
但是我已經(jīng)在”Nice to meet you!\n”后面加上換行符,不是應(yīng)該刷新文件緩沖區(qū),使得”Nice to meet you!\n”寫到hello文件當(dāng)中去么?但是實(shí)際并沒(méi)有,這是為什么 ,求解惑
有網(wǎng)友說(shuō)是因?yàn)榭刂婆_(tái)文件和常規(guī)文件的區(qū)別,那是不是可以這么認(rèn)為,在C標(biāo)準(zhǔn)中,控制臺(tái)有單獨(dú)的緩存空間,有單獨(dú)的運(yùn)行規(guī)則,比如遇到\n就執(zhí)行刷新操作,而常規(guī)文件中的緩存空間是沒(méi)有這個(gè)設(shè)定的,有待進(jìn)一步確定。
原因:只有stdout的緩沖區(qū)是通過(guò)‘\n’進(jìn)行行刷新的,但是我開始的時(shí)候就把stdout就關(guān)閉了,就會(huì)像普通文件一樣像文件中寫,所以‘\n’是不會(huì)行刷新的,所以要使用fflush(stdout)。
stderr無(wú)緩沖,不用經(jīng)過(guò)fflush或exit,就直接打印出來(lái)
stdout行緩沖 遇到\n刷新緩沖區(qū)
http://blog.csdn.net/a312024054/article/details/46946237
總結(jié)
以上是生活随笔為你收集整理的linux printf 刷新,linux下printf中\n刷新缓冲区的疑问(已解决)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux7 security,SECU
- 下一篇: c语言矩阵乘法优化,c语言矩阵相乘