Linux系统下cp指令的实现2(内存优化版)

回顾:

前一篇博客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;
}

运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值