实现linux cp指令的代码

本文详细介绍了如何使用C语言实现基本的cp指令功能,涉及文件操作、参数处理以及环境变量对程序执行的影响。通过main函数和系统调用,展示了复制文件的基本步骤和为何在实际运行时需要考虑环境变量的问题。
摘要由CSDN通过智能技术生成

实现思路:

1、打开demo1.c文件

2、把demo1.c文件中的内容写到buf上

3、创建/打开demo2.c文件

4、把写入的buf中的文件内容读取到demo2.c中

5、关闭两个文件

引入main函数标准原型:

main(int argc, char **argv, char **enpv);或者main(int argc, char *argv[], char *enpv[]);

int argc:整型,其中包括的是命令行参数的个数(如下图展示)

char **argv:二维的char型指针,存放命令行参数字符串

char **enpv:二维的char型指针,存放环境变量

#include<stdio.h>
int main(int argc,char *argv[])
{
        printf("参数总个数是:%d\n",argc);
        printf("第一个参数是:%s\n",argv[0]);
        printf("第二个参数是:%s\n",argv[1]);
        printf("第三个参数是:%s\n",argv[2]);
        return 0;
}

程序运行的结果:./a.out demo1 demo2

参数总个数是:3
第一个参数是:./a.out
第二个参数是:demo1
第三个参数是:demo2

实现cp指令代码

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

int main(int argc,char *argv[])//argc表示参数的个数,argv表示字符串数组是二级指针
{
        int fd;
        int fd2;
        int size;
        int n_read;
        int n_write;
        char*readbuf=NULL;

        if(argc!=3){
                printf("input error\n");
                exit(0);//正常退出              
        }

        fd=open(argv[1],O_RDWR);
        if(fd==-1){
                printf("file open failed\n");
                perror("open");
                exit(0);
        }

        size=lseek(fd,0,SEEK_END);
        readbuf=(char*)malloc(sizeof(char)*size+8);

        lseek(fd,0,SEEK_SET);

        n_read=read(fd,readbuf,sizeof(char)*size+8);
        if(n_read==-1){
                printf("file read failed\n");
                perror("read");
                exit(0);
        }

        fd2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
        if(fd2==-1){
                printf("open error\n");
                perror("open");
                exit(0);
        }

        n_write=write(fd2,readbuf,strlen(readbuf));
        if(n_write==-1){
                printf("file write failed");
                perror("write");
                exit(0);
        }

        close(fd);
        close(fd2);

        return 0;
}

但是我们在运行这个实现cp指令的代码时(我们在编译时改名字为cp),需要输入./cp xxx xxx

但是真实的cp指令并不需要“./”,这是因为环境变量的原因,大家可以看一下下面这个文章里面提到的环境变量的小节部分:进程相关概念及C程序的存储空间的分配-CSDN博客

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值