zoukankan      html  css  js  c++  java
  • 文件复制函数的效率比较

    使用read, write, scanf, printf等系统调用或库函数,可以实现简单的文件复制程序,但效率上有明显差别。

    方法一:逐个字符读入并输出

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    
    int main(void){
        char c;
        int in, out;
    
        in=open("file.in", O_RDONLY);
        out=open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
    
        while(read(in, &c, 1)==1){
            write(out, &c, 1);
        }
    
        exit(0);
    }
    执行效率:

    [lujinhong@lujinhong BeginningLinuxProgramming]$ TIMEFORAMT="" time ./a.out
    0.31user 8.07system 0:08.40elapsed 99%CPU (0avgtext+0avgdata 1392maxresident)k
    0inputs+9032outputs (0major+110minor)pagefaults 0swaps

    方法二:每次读入1K再输出

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    
    #define READ_SIZE 1024
    
    int main(void){
        char c[READ_SIZE];
        int in, out;
        int nread;
    
        in=open("file.in", O_RDONLY);
        out=open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
    
        while((nread=read(in, c, READ_SIZE))>0){
            write(out, c, nread);
        }
    
        exit(0);
    }
    执行效率:

    [lujinhong@lujinhong BeginningLinuxProgramming]$ TIMEFORAMT="" time ./a.out
    0.00user 0.01system 0:00.01elapsed 92%CPU (0avgtext+0avgdata 1408maxresident)k
    0inputs+9032outputs (0major+111minor)pagefaults 0swaps


  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/eaglegeek/p/4558024.html
Copyright © 2011-2022 走看看