Linux下不支持fflush刷新缓冲区,所以我们想到了setbuf函数,这随之而来的各种问题和小伙伴探讨之后得出如下结论
首先,网上有很多不同的言论,有的说setbuf只是刷新缓冲区,有的说会关闭缓冲区,众说纷纭,经过我们的测试和查找资料,如果你将stdin/stdout指向NULL,setbuf会关闭你的缓冲区,而不仅仅是刷新(查询度娘和man手册)。
例如:setbuf(stdin,NULL);
因为stdin相当于一股输入流,你把它指向空,那么就不仅仅是刷新了,他会关闭你的输入缓冲区,而从你的输入流里读数据。而输入流是行缓冲,但也会保存你的每一个字符(例如你的回车和空格,就像你的输入缓冲区有时候在cin的错误输入下,也会保存回车,如果你的输入流不存回车,那么他从哪里拿的回车呢?关于这个问题,具体大家可以看我的上一篇博客这里写链接内容 )
综上所述,setbuf会将缓冲区更改为你指定的内存,而当你将stdin,stdout指向NULL,他会关闭 输入/输出缓冲区,而更改为从输入/输出流里去拿数据,而这两者的区别:效率 肯定是有缓冲区更高,输入流是行缓冲,而且这两者的的具体大小可能不同,其他表现出来的具体使用时并没有什么区别