手写linux中的cp指令

手写linux中的cp指令

我们平时在Linux环境下复制一个文件,一般都直接用:
cp 文件a 文件b
面试时可能会遇到叫你手写cp指令的情况!

argc用来记录程序启动时就传入的参数个数, char **argv用来记录每个实参的地址注意argv可使用数组也可使用二级指针,且注意类型为char型
一个具有注脚的文本。
用一点简单的代码解释一下 argc 、argv的作用

#include<stdio.h>

int main(int argc,char **argv)
{
        printf("totol prams:%d\n",argc);
        printf("No1.arams:%s\n",argv[0]);
        printf("No2.arams:%s\n",argv[1]);
        printf("No3.arams:%s\n",argv[2]);

        return 0;
}

在命令行界面运行生成的text.out

./text.out first second

之后我们可以看到

在这里插入图片描述
可以看到在./text.out first second命令后有三个参数,第一个是程序名字,第二个是first ,第三个是second,事实证明确实是三个参数,这样就容易理解了吧。是不是很想cp指令的格式

代码的实现

接下来加亿小小点改进。
思路是什么呢?
1.首先我们肯定要打开源文件,src.c
2.读取源文件的内容保存到readbuf中。
3.创建/打开 目标文件des.c
4.将readbuf中的内容写到des.c中
5.关闭两个文件(文件操作最后都需要关闭)
这样就得到了我们要得代码QvQ

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

 int main(int argc,char **argv)
{
        int fdsrc;
        int fddes;
        char *readbuf=NULL;
        if(argc!=3){
                printf("pararm error\n");
                exit(-1);
}
		int size =lseek(fdsrc,0,SEEK_END);
		lseek(fdsrc,0,SEEK_SET);
		
		readbuf=(char*)malloc(sizeof(char)*size+8);
		
		int n_read = read(fdsrc,readbuf,size);
        fdsrc=open(argv[1],O_RDWR);
        lseek(fdsrc,0,SEEK_SET);



        fddes = open(argv[2],O_RDWR|O_CREAT,0600);
        int n_write = (fddes,readbuf,strlen(readbuf));

        close(fdsrc);
        close(fddes);
}

最后让我们看看结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值