casio1374633

导航

 

学习中了解到,文件复制和文件块写操作.CPU在复制过程中操作一次read和write都会进行一次系统调用,那么字符写和块写的差别有多大呢?

代码:

==================================================
字节操作:

/*--------------------------------------------
//写入1K大小的文件,文件内容为空.当然,稍作修改,可以复制任意字符.不论I/O
//测试速度:
//Char creat complete!
//0.00user 0.00system 0:00.02elapsed 38%CPU (0avgtext+0avgdata 0maxresident)k
//0inputs+16outputs (0major+119minor)pagefaults 0swaps
//可见即使是1K的文件,不但占用cpu很大,而且很慢.
*/

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
   char c = 0;
   int cnt, out;

   out = open("char_file.out", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
   for ( cnt = 0; cnt < 1024; cnt++)
      write(out, &c, 1);

   printf("Char creat complete!\n");
   exit(0);
}

==================================================

/*
//块写入.就是一次写入一个块的大小.块大小自定义.若执行本文件请谨慎,这个程序1次写1个1G的文件出来.
//那么速度是多少呢.很快.44.44秒!!!!!!!!!!!!!!!!
//1G file creat complete!
//0.00user 3.85system 0:36.48elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k
//64inputs+2048008outputs (0major+1400minor)pagefaults 0swaps
//可以看到.cpu占用率才8%.效率也很快.
//该程序稍加修改可以作为多种用途.十分方便.
*/
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define N 5242880 /*我在测试单个创建最大数组量发现不能超过10M.所以只用了5M*/

int main(void)
{
   char block[N] = {0};
   int out,cnt;

   out = open("1G_file.out", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
   for (cnt = 0; cnt < 1000; cnt++) {
      write(out, block, N);
}
   printf("1G file creat complete!\n");
   exit(0);
}

=========================================
当然,如果你想刷人家的硬盘......这个还是不说了...

posted on 2013-04-28 09:38  casio1374633  阅读(188)  评论(0编辑  收藏  举报