《unix环境高级编程》习题5.1—使用setvbuf实现setbuf
如上图,setvbuf有两种形式:
- buf为NULL
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);
}
}
}
本文介绍如何通过setvbuf函数实现setbuf的功能。针对不同情况,文章提供了当buf为NULL时设置无缓冲,以及buf不为NULL时根据是否为终端设备选择行缓冲或全缓冲的具体实现。
29

被折叠的 条评论
为什么被折叠?



