最近在研究I/O缓冲,发现了一个问题,在网上搜了很久都没有答案。
先上代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
printf("stdout buffer total size: %d\n",stdout->_bufsiz);
printf("stdout buffer used size: %d\n",stdout->_cnt);
cout<<"asdf";
printf("stdout buffer total size: %d\n",stdout->_bufsiz);
printf("stdout buffer used size: %d\n",stdout->_cnt);
return 0;
}
问题:
1、为什么stdout->_bufsize会为0呢?不是说是4096吗??
2、cout<<"asdf",这行代码没有endl,按道理是不会强制刷新输出缓冲区的,但是为什么在第二次打印stdout->_cnt的时候,仍然为0呢?我知道很多时候,因为系统对缓冲区的自我检查,导致有没有endl,基本上效果是一样的,但是我就是想知道有没有一段代码可以证明有enld和没有endl的区别?太想知道了!!
谢谢各路大神帮忙!