《APUE》第五章练习1
2015-02-05 13:40
225 查看
题目:用setvbuf实现setbuf。
这两个函数都是改变流的缓冲模式的。函数原型如下:
#include <stdio.h>
void setbuf(FILE *fp, char *buf);
void setvbuf(FILE *fp, char *buf, int mode, size_t size);
毫无疑问,setvbuf是setbuf的升级版。下面我们再看看这两个函数是怎么工作的:
View Code
结果如下:
这两个函数都是改变流的缓冲模式的。函数原型如下:
#include <stdio.h>
void setbuf(FILE *fp, char *buf);
void setvbuf(FILE *fp, char *buf, int mode, size_t size);
毫无疑问,setvbuf是setbuf的升级版。下面我们再看看这两个函数是怎么工作的:
/* 用setvbuf来实现setbuf */ #include <stdio.h> #include <stdlib.h> void pr_stdio(const char *, FILE *); void my_setbuf(FILE *, char *); int main(void) { char buf[BUFSIZ]; char filename[BUFSIZ]; FILE *fp; printf("Please input a filename:"); scanf(" %s", filename); if ((fp = fopen(filename, "r")) == NULL) /* 打开文件 */ { printf("fopen error"); exit(1); } pr_stdio(filename, fp); /* 查看是什么缓冲,一般是全缓冲 */ if (fp->_IO_file_flags &_IO_UNBUFFERED ) /* 文件流是无缓冲的,调成有缓冲 */ my_setbuf(fp, buf); else /* 文件流是有缓冲的,调成无缓冲 */ my_setbuf(fp, NULL); printf("After setbuf...\n"); pr_stdio(filename, fp); /* 关闭了缓冲 */ return 0; } void pr_stdio(const char *pathname, FILE *fp) { printf("stream = %s, ", pathname); if (fp->_IO_file_flags & _IO_UNBUFFERED) /* 无缓冲 */ printf("unbuffered\n"); else if (fp->_IO_file_flags & _IO_LINE_BUF) /* 行缓冲 */ printf("line buffered\n"); else /* 全缓冲 */ printf("fully buffered\n"); } void my_setbuf(FILE *fp, char *buf) /* setbuf函数,要么打开,要么关闭,是全缓冲还是行缓冲决定于fp */ { int fd; fd = fileno(fp); /* 获取文件描述符 */ if (buf == NULL) /* 修改为无缓冲 */ { setvbuf(fp, buf, _IONBF, BUFSIZ); return; } if (fd == 0 || fd == 1 || fd == 2) /* 与终端设备相关,应设为行缓冲 */ setvbuf(fp, buf, _IOLBF, BUFSIZ); else /* 设为全缓冲 */ setvbuf(fp, buf, _IOFBF, BUFSIZ); }
View Code
结果如下:
![](http://images.cnitblog.com/blog/718617/201502/051337347658347.png)
相关文章推荐
- Java入门 第一季第五章 编程练习解析
- 第五章上机练习5畅销书排行榜
- 算法与数据结构第五章树上机练习
- 第五章 编程练习
- 模板元编程第五章练习(非答案)
- 第五章概率分析和随机算法之练习5.3-6
- visual c++ 2012入门经典 练习(第五章)
- Java编程思想第四版第五章练习
- c++primer第五版课后练习答案(第五章)
- APUE-第五章学习-标准I/O库-习题
- APUE课后练习3.2
- C primer plus 第五章 编程练习个人答案
- C语言 第五章 循环结构练习
- 第五章,AsyncTask和ProgressBar的练习(Android)
- 《Android编程权威指南》第二版 第五章 挑战练习
- 第五章 编程练习
- Java入门 第一季第五章 编程练习解析
- 《APUE》第五章笔记
- 现代软件工程 第五章 【团队和流程】练习与讨论
- 第五章练习