学习中了解到,文件复制和文件块写操作.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); }
=========================================
当然,如果你想刷人家的硬盘......这个还是不说了...