学习linux系统的对cp命令一定不陌生,如何去自己写一个mycp指令?
首先需要了解cp命令运作的原理
1、接收参数(诸如:cp demo1.c demo2.c)
2、打开原文件
3、复制原文件的信息
4、粘贴到目标文件里(目标)
接下来cp命令的思路
//验证参数是否等于3,如果不等于3 ,打印 参数错误 并退出
//以读写的方式打开文件,赋值给fdsrc,如果不存在,则创建一下
//打开源文件
//打开目标文件,如果没有就创建
//头文件要写全
//传参,3个参数
//定义fdSrc和fdDes
//定义readBuf,开辟1024字节,并全部初始化
//判断参数是否等于3,否则判断参数有问题,且退出程序
//赋值fdsrc,读写方式打开传入的参数2(argv【1】)
//lseek算出文件大小
//赋值n_read,读取readBuf的内容
//赋值fdDes,如果不存在des文件,则创建新文件
//赋值size为lseek计算文件大小
//lseek一下
//redbuf开辟空间,原文件大小+8字节(char *)malloc(sizeof(char)*size+8)因为防止空间不够,做一个冗余
//赋值n_read read(fdSrc,readBuf,strlen(readBuf))
//fdDes 读写打开,不存在就创建,写入readbuf
//赋值n_write write(fdDes,readBuf,strlen(readBuf)
//关闭原文件
//关闭目标文件
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char **argv){
int fdSrc;
int fdDes;
char *readBuf = NULL;
if (argc != 3){
printf("param error!\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR);
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,strlen(readBuf));
fdDes = open(argv[2],O_RDWR|O_CREAT,0600);
int n_wirte = write(fdSrc,readBuf,strlen(readBuf));
close(fdSrc);
close(fdDes);
return 0;
}
编译命令如下
gcc file16cp.c -o mycp
./mycp file1.c newFile.c
这里注意 file16cp.c就是我们复刻的cp命令文件
file1.c文件是我们打算复制的文件,newfile.c就是复制完毕的副本
复刻cp命令的介绍就差不多了,下一篇即将是进程阶段的学习,博主近期终于回归!可以给博主一个免费的三连吗