回顾:
前一篇博客cp指令的实现,有点浪费内存,易出现bug。因为一开始设置读取数组为1024,若cp的文件过小会造成内存浪费,而cp文件过大1024的数组也不够装,考虑这个问题于是优化代码,并结合文件系统函数优化整体代码。
执行流程:
src 源文件 des 目标文件
1、打开源文件(src)open()函数;
2、打开目标文件(des)open()函数;
3、设置while(1)循环
4、读取src文件到缓存数组read;
5、写入目标文件write;
6、关闭目标文件和源文件close;
7、./a.out src.c des.c
cp指令代码来咯:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(int argc , char *argv[]){
int stc;
int des;
char readbuff[128]={0};
int read_had=0;
if(argc !=3){
printf("error plesae again\n");
return -1;
}
stc = open(argv[1],O_RDWR);
if(stc<0){
printf("open argv[1]=%d is fail\n",stc);
return -1;
}
des = open(argv[2], O_RDWR|O_CREAT, 0755);
if(des<0){
printf("open argv[2]=%d is fail\n",des);
return -1;
}
while(1){
read_had=read(stc,&readbuff,128);//once read 128 byte
if(read_had<128){//当读取文件小于128,跳出循环
break;
}
write(des,&readbuff,read_had);
memset(readbuff,0,128); //清理数组作用,每一次读取完,重新赋值为0
}
write(des,&readbuff,read_had);//写入剩下小于128的内容
close(stc);
close(des);
return 0;
}
运行结果: