当前位置: 技术问答>linux和unix
fflush() 和 setvbuf() 的问题。
来源: 互联网 发布时间:2016-12-17
本文导语: #include #include #include int main(int argc, char *argv[]) { int i = 0; char c; if(setvbuf(stdin, NULL, _IOLBF, 4 * sizeof(int))) { puts("Buffer error!n"); exit(1); } while(1) { ...
#include
#include
#include
int main(int argc, char *argv[])
{
int i = 0;
char c;
if(setvbuf(stdin, NULL, _IOLBF, 4 * sizeof(int)))
{
puts("Buffer error!n");
exit(1);
}
while(1)
{
sleep(1); //我用setvbuf()设置绶存大小为4个int型的。。为什么这个程序不是像我设置的那样去输出
//呢。为什么不是每次输出4个数??
printf("%d", i);
// fflush(stdout);
i++;
}
return 0;
}
|
别研究这个事情了,翻glibc源码没用,各个平台的实现可能不一样,实际项目也用不到这种东西
|
man setvbuf 里面有这么一句: If the argument buf is NULL, only the mode is affected
所以我觉得,如果要控制buffer的大小,可能就不能用NULL
我这样试了一下:
char buf[100];
if(setvbuf(stdout, buf, _IOLBF, 4 * sizeof(int)))
结果i到了10以上之后,每次输出9个数也就是18个字符,不是16个,不明白为什么。
所以我觉得,如果要控制buffer的大小,可能就不能用NULL
我这样试了一下:
char buf[100];
if(setvbuf(stdout, buf, _IOLBF, 4 * sizeof(int)))
结果i到了10以上之后,每次输出9个数也就是18个字符,不是16个,不明白为什么。