[Linux]标准IO全缓冲和行缓冲
概述
标准IO中,标准错误是不带缓冲的。若是指向终端设备的流才是行缓冲的,否则是全缓冲的。
行缓冲也可以分配缓冲区,当遇到超大行(超过缓冲区的行),缓冲区内容也会优先刷出。
示例
#include <stdlib.h> #include <stdio.h> #include <limits.h> #include <unistd.h> #define MAXLINE 6 void do_line(char *); int main(void) { char line[MAXLINE]; while(fgets(line, MAXLINE, stdin) != NULL){ do_line(line); } exit(0); } void do_line(char *line) { printf("%s\n", line); }
当输入行少于6-1(n-1是fgets函数规定的)字符时,fgets正常返回一次;
当输入行大于6-1字符时,fgets返回多于一次;
输入:65613131325654654987976546 输出:65613 13132 56546 54987 97654 6