setbuf

设置文件流的缓冲区

头文件

#include < stdio.h >

相关函数

setbuf , setbuffer, setlinebuf, setvbuf

函数原型

void setbuf(FILE *stream, char *buf);

函数说明

在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址。如果参数buf为NULL指针,则为无缓冲IO。Setbuf()相当于调用:setvbuf(stream,buf,buf?IOFBF:IONBF,BUFSIZ)

buf的size至少是BUFSIZ(定义在stdio.h),否则存在缓冲溢出可能

范例

setbuf(stdout, NULL)

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    char ch;
    setbuf(stdout,NULL);
    while(1){
        ch = getchar();
        printf("%c",ch);
    }
    return 0;
}

分析: strace ./setbuf

....
read(0, 123456
"123456\n", 1024)               = 7
write(1, "1", 11)                        = 1
write(1, "2", 12)                        = 1
write(1, "3", 13)                        = 1
write(1, "4", 14)                        = 1
write(1, "5", 15)                        = 1
write(1, "6", 16)                        = 1
write(1, "\n", 1
)                       = 1

会发现对输入的每一个字符都执行了write系统调用

文档更新时间: 2021-03-07 21:29   作者:周国强