UC编程:通过fwrite()和write()比较标准库函数和系统调用的速度
fwrte是C标准库中提供的函数,是对write函数的扩展与封装,write则是Unix系统提供的函数。按照常理来讲,系统调用肯定比使用库快的多,但是事实正好相反 Why?原因就在于缓冲的问题,fwite会在内存中开辟缓冲区,来避免频繁的I/O,所以速度比系统调用要快(更多比较“open/read/write和fopen/fread/fwrite的区别”)
为了直观的比较一下fwrite和write的速度。我们来做一个简单的测试:
fwrite.c
[c]
#include <stdio.h>
int main(void)
{
FILE *stream;
int i;
char str[] = "qwertyuiop\n";
if ((stream = fopen("fwrite.txt", "w")) == NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
for(i=0; i<100000; i++)
{
fwrite(str, sizeof(str), 1, stream);
}
fclose(stream); /*关闭文件*/
return 0;
}
[/c]
运行时间:
[code]
real 0m0.009s
user 0m0.003s
sys 0m0.005s
[/code]
write.c
[c]
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
int fd;
int i;
char str[] = "qwertyuiop\n";
if ((fd = open("write.txt", O_RDWR|O_CREAT|O_TRUNC, 00664)) < 0)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
for(i=0; i<100000; i++)
{
write(fd, str, sizeof(str));
}
close(fd); /*关闭文件*/
return 0;
}
[/c]
运行时间:
[code]
real 0m0.189s
user 0m0.008s
sys 0m0.181s
[/code]
果然,从程序运行时间上看,使用标准库函数速度比直接系统调用快了很多 从程序的可移植性角度来讲,使用标准库函数也是一个好的习惯 而系统调用则是用在和系统关联度很高的地方
UC编程:通过fwrite()和write()比较标准库函数和系统调用的速度的更多相关文章
- 2.C++标准库函数:getline函数 定界流输入截取函数 -windows编程
引言:今天工作遇到了一个需要按行读取txt文件数据的需求,查询了一下getline()函数,发现这竟然是一个C++的标准库函数,而且设计的很好,特地做一下记录.getline本质是一个定界流输入截取函 ...
- C89标准库函数手册(待整理)
http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h> ...
- C++ - 常用的标准库函数
写在前面 C++是一门博大精深的语言,也是最难学的一门编程语言,每一位励志学好C++的程序员都需要从基本功开始,稳扎稳打. 自从1998年C++ standard定案以后,C++程序库便有了大幅扩 ...
- C语言中最常用标准库函数
标准头文件包括: <asset.h> <ctype.h> <errno.h> <float.h> <limits ...
- 74个Swift标准库函数
74个Swift标准库函数 本文译自 Swift Standard Library: Documented and undocumented built-in functions in the Swi ...
- C89标准库函数手册
http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h> ...
- C语言中最常用的标准库函数
标准头文件包括: <asset.h> <ctype.h> <errno.h> <float.h> <limits ...
- 标准库函数atoi的实现
标准库函数atoi用于将字符串类型的数据转换为整形数据:在转换过程中要考虑空指针.空字符串"".正负号,溢出等情况 这里是将字符串str转换为32位整型,其正数的最值为0x7FFF ...
- C语言提供了几个标准库函数 itoa() atoi()
C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...
随机推荐
- (spring-第14回【IoC基础篇】)国际化信息 (转)
国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作 ...
- 提高duilib的richedit控制的一些特征
转载请注明原始出处.谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41208207 假设要使用透明异形窗口功能,首先要改进duilib库让他 ...
- JSON-C结构简介、使用
官方站点介绍http://www.json.org JSON (JavaScript Object Notation) is a lightweight data-interchange format ...
- VS2013上利用InstallShield2013LimitedEdition/C#生成安装包
1.文件-新建项目-其它项目类型-安装和部署 一開始是没有InstallShield2013LimitedEdition这个软件的.你须要去站点上填写信息而且下载 2.填写信息下载 訪问站点:http ...
- VB.NET之错误异常处理
相对于VB而言,VB.NET中引入了很多特色.当中最吸引我的就是引入了结构化异常处理. 尽管VB.NET仍然支持OnError Goto类型的异常处理,可是这样做并非非常好.相比而言,结构化异常处理更 ...
- 【 Android官方文件读书笔记】连接网络
一间连接应用网络的主要功能.Android系统对网络连接进行了封装,使得开发人员可以更快的给应用添加网络功能.大多数网络连接的Android应用使用HTTP发送和接受数据.Android包含两个HTT ...
- urlrewrite使用地址重写
地址重写: 主要是为了站点的安全. 比如我们平时的地址请求 地址重写前,訪问路径是: /read.egov?action=read&bid=2 地址重写后,訪问路径是:/read-read-2 ...
- Cocos2d-X字体
Cocos2d-X顺便文本显示在以下三个: CCLabelTTF: 使用系统字体.每一个字符串会生成一个纹理.显示效率比較低下,适合不变化的文字 CCLabelAtlas: 使用NodeAtlas优化 ...
- Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
GXPT它是一个分布式系统,该系统包括一个临时许可系统.基本系统.教学评价体系.考试系统,每个系统都有自己的oracle数据库.统,而评教系统的正常须要借助于权限系统和基础系统,详细的业务这里就不多解 ...
- (两)unity4.6Ugui中国教程文档-------总结-UGUI Canvas
大家好,我是广东太阳. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...