【回眸】技术干货——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!

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务