APUE---chap3文件I/O---3.9~3.10

  • 3.9 io效率问题
  • 查看程序执行时间:

终端输入:time ./a.out  

real(总时间)  =  user(用户时间) + sys(系统调用) 

  •  程序性能测试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define BUFFSIZE 4096

int main(void) {
    int n;
    char buf[BUFFSIZE];

    while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)  //手动输入
        if (write(STDOUT_FILENO, buf, n) != n) // 把buf的内容重定向到STDOUT_FILENO标准输出上
            perror("write error");

    if (n < 0)
        perror("read error");

    exit(0);
}

用不同的BUFFERSIZE来运行程序,下图展示了20种不同缓冲区长度读取516581760字节文件得到的结果。可以得知匹配磁盘长度(由st_blksize的大小决定)的附近读取速度是最快的。BUFFERSIZE大小为4096前后的读取速度很快。差别不是很大。

大多数文件系统为改善性能:都采用预读(read ahead)的技术 

 ......

3.10 文件共享

面试:写程序删除一个文件第10行?

1. 打开两次:

通过getline/lseek找到第11行行首--->读取之后的内容---->写到新文件

通过getline/lseek找到第10行行首--->读取之前的内容---->写到新文件

2. 多线程文件共享:

如果上述的1 动作可以放在两个线程进行,实现文件共享,进而提高调用速度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值