【回眸】技术干货——Linux内核(五)复刻cp命令
Linux内核如何复刻CP命令,制作“mycp”
前言
学习linux系统的对cp命令一定不陌生,如何去自己写一个mycp指令?首先需要了解cp命令运作的原理
接收参数(诸如:cp demo1.c demo2.c) 打开原文件 复制原文件的信息 粘贴到目标文件里(目标)
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)
//关闭原文件
//关闭目标文件
mycp命令的代码实现
#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; }
mycp的编译命令
gcc file16cp.c -o mycp ./mycp file1.c newFile.c
这里注意 file16cp.c就是我们复刻的cp命令文件file1.c文件是我们打算复制的文件,newfile.c就是复制完毕的副本。
后记碎碎念
Linux是一个系列,可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。
Linux内核相关的内容介绍的比较简单,如果需要深入学习还需要再找更详细的相关资料,祝大家学有所成!
#央国企投递记录##26届秋招投递记录##找工作有哪些冷知识##薪资爆料##校招求职有谈薪空间吗#本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!