setvbuf实现setbuf

来源:互联网 发布:新手做微商好还是淘宝 编辑:程序博客网 时间:2024/06/06 00:53

《unix环境高级编程》习题5.1—使用setvbuf实现setbuf


setbuf和setvbuf

如上图,setvbuf有两种形式:

  1. buf为NULL
  2. buf不为NULL

    • 终端设备
    • 非终端设备

#include <stdio.h>#include <sys/stat.h>void my_setbuf(FILE *fp, char *restrict buf){    if (buf == NULL) { /* no buffer */        setvbuf(fp, buf, _IONBF, 0);    }    else {        int fd;        struct stat fp_stat;        fstat(fileno(fp), &fp_stat);        if (S_ISCHR(fp_stat.st_mode)) {/* line buffer */            setvbuf(fp, buf, _IOLBF, BUFSIZ);        }        else { /* full buffer */            setvbuf(fp, buf, _IOFBF, BUFSIZ);        }    }}
0 0
原创粉丝点击