免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1176 | 回复: 0
打印 上一主题 下一主题

标准C语言IO与Unix/Linux IO API比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-09 21:56 |只看该作者 |倒序浏览

关于Unix/Linux环境下的文件操作
对文件进行操作有两种方式:一种是直接使用unix api, 一种是使用标准C库。
我对这两种方法执行效率进行了比较。
实验内容分为3个部分:
1 读数据小路比较
2 打开文件效率比较
3 linux环境进程支持的最大打开文件数
首先介绍一下实验环境和使用的工具:
Unbuntu Dapper Drake 6.06
gcc 4.0.3
使用的工具有:
time, 输出重定向
time 程序名(命令) 参数
int read(fd, buf, size);
fd是文件描述符号,在unistd.h中预定义了STDIN_FILENO等标准文件描述符。
buf是char型数组
size是每次读入的缓冲区大小
返回值是实际读到字节数,
    在接近文件尾的时候,返回值可能小于size的
    在文件尾的时候返回0
     出错返回负数
read必须自己定义缓冲区的大小,如果定义不当,可能导致效率降低。
缓冲区的定义,也不适越大越好。缓冲区的大小最好与磁盘的块大小保持一致。
在给出的数据中:块的大小为4096.
实验代码和结果:
#define BUFFSIZE 4096
#define G_BUFF 1073741824  // 2^30
#define M_BUFF 1048576     // 2^20
#define K_BUFF 1024        // 2^10
   
int n;
char buf[M_BUFF];
char c;
while ((n=(read(STDIN_FILENO, buf, BUFFSIZE) ) ) >0)
{
    for (int i=0;i0)
{
    ;
}
root@zhongcun:~/c++/forXunLei# time ./a.out 0)
    {
        for (int i=0;i0)
    {
        for (int i=0;i0)
    {
        for (int i=0;i
    中对提到的fread的不足:
    1 The offset of a member within a structure can differ between compilers and systems, because of different aliagnment requirements.
    2 The binary format used to store multibyte integers and floating-point values differ among machine architectures.
2 打开文件操作
系统调用和std io的差别不适很大
打开关闭1,000,000次
用户态代码平均时间0.2s
系统态代码平均时间1.7s
for (int i=0;i
系统总结unix api函数的用法
4 关于std io实现的思考
这取决于编译器堆,类库的实现
是否是直接调用os api呢?
这是最容易的实现
但intel开发的编译器?他调用哪个操作系统的api?
编译器将代码转化为指令
需要对语言标准进行支持,对标准类库进行支持。
5
man time
6
当系统运行很多大程序(OpenOffice Word)的时候,执行时间显著变慢。
7
标准声明的变量
#include
stdio是在该文件中定义的文件指针。
EOF
std io对读错误和文件结束的处理
read直接可以通过返回的整数来确认
但文件是否出错或到达末尾需要通过函数feof(), ferror()来检测

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/67414/showart_1895817.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP