[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

 

posted @ 2019-03-20 17:08  yiyide266  阅读(918)  评论(0编辑  收藏  举报