Linux Advance--标准I/O的效率
2015-11-24 15:31
519 查看
Linux的读写流声明如下:
首先是 fgetc 和 fputc 测试:
结果:
下面是 getc 和 putc 测试:
下面测试 fgets 和 fputs:
结果:
由上述结果可见标准IO的运行效率,fgets 和 fputs 是最快的,当然这是建立在缓冲区足够大的前提下,如果缓冲长度很小,比如为2,那么效率会很差,结果见下图:
这里我们的输入文件有 81M,缓冲区设置小了会增加系统掉用的次数,系统调用与普通的函数调用相比通常需要花费更多的时间。
#include <stdio.h> int getc(FILE *fp); int fgetc(FILE *fp); int getchar(void); int ferror(FILE *fp); int feof(FILE *fp); void clearerr(FILE *fp); int ungetc(int c, FILE *fp); int putc(int c); int fputc(int c, FILE *fp); int putchar(void);
首先是 fgetc 和 fputc 测试:
#include <stdio.h> int main() { int c; while ((c = fgetc(stdin)) != EOF) if (fputc(c, stdout) == EOF) { printf("output error\n"); exit(1); } if (ferror(stdin)) { printf("input error\n"); exit(1); } return 0; }
结果:
下面是 getc 和 putc 测试:
下面测试 fgets 和 fputs:
#include <stdio.h> #define MAXLINE 1024 int main() { int c; char buf[MAXLINE]; while (fgets(buf, MAXLINE, stdin) != 0) if (fputs(buf, stdout) == EOF) { printf("output error\n"); exit(1); } if (ferror(stdin)) { printf("input error\n"); exit(1); } return 0; }
结果:
由上述结果可见标准IO的运行效率,fgets 和 fputs 是最快的,当然这是建立在缓冲区足够大的前提下,如果缓冲长度很小,比如为2,那么效率会很差,结果见下图:
这里我们的输入文件有 81M,缓冲区设置小了会增加系统掉用的次数,系统调用与普通的函数调用相比通常需要花费更多的时间。
相关文章推荐
- linux ssh 登录同时执行其他指令
- Linux-2.6.32.2 中固然有 DM9000 网卡驱动,但并不是完全的适合mini2440,导致挂载不上nfs文件系统
- 64位linux报错Could not initialize class java.awt.image.BufferedImage
- Linux内核中ioremap映射的透彻理解
- linux下安装mysql以及错误解决方案
- Linux下压缩某个文件夹(文件夹打包)
- Linux下python升级至2.7步骤
- Hadoop(2.7.0)伪分布式环境CentOS(7.0 64位)配置
- 使用 PAM 集成 OpenLDAP 实现 Linux 统一管理系统用户
- linux命令行任务管理
- (二)linux下ping不通的解决方法
- linux查看目录大小
- Centos6.7 ELK日志系统部署
- Linux编程——makefile编写技巧大全
- linux本地域名解析文件
- linux 下OTL连接SQLServer非配置版
- dhcp为大量pc设置固定ip脚本【转自《鸟哥的linux私房菜》】
- centos7 下安装mysql
- 32-linux任务调度定时备份mysql数据库和文件夹
- linux的vnc- rdesktop远程登录windows桌面