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

全部评论

相关推荐

之前在牛客看到了很多面经特别有用,本着开源精神我也分享一下自己的秋招,希望能帮到后面找工作的大家我是双非本+国外的水硕,之前有一段中厂实习,暑期在鹅客户端实习秋招第一个面试是米哈游的线下引擎沙龙,7.12。面试体验挺好的,问的基本都答上来了但是最后挂了,也不知道为什么,米哈游挂了以后就给我转线上了,一面是在7.29,体验也挺不错的,面试官特别和蔼。网易互娱这边也有一个类似米的线下引擎沙龙,但是因为要去广州时间比较赶所以就没去了因为当时已经在鹅实习准备转正实在太忙,所以秋招基本上只投了米和猪两家,中小厂没有投。当时基本7月初的时候各家校园招聘提前批就启动了,但是我拖到7月底才开始投简历,不过也很快就捞起来了,所以感觉其实没必要太焦虑7月初开了就投技术提前批这个东西,基本上整个7月8月都是在捞人的,等晚点也ok。雷火找的学长内推给我免笔试了,一面在7.31;互娱没有内推所以没办法免笔,我做的是8.2号的那一批笔试。之后就是8.4号雷火二面以及8.5号米哈游二面。在这中途互娱突然发了个8.7的面试,但是因为时间实在赶不上所以就推了一下(其实是因为不太想去做自研引擎中途歇息了一周去开SIGGRAPH了,回来以后雷火三面在8.18,然后hr面在8.21。基本上秋招面试就结束了。鹅这边转正答辩在8月底,也算是顺利通过了。9月回美国了以后互娱突然发了一个让我凌晨三点起来面试的邀请,当时雷火和鹅基本上都算是通过了所以我也就拒绝了,把机会留给有需要的同学吧。然后就是一些秋招体会吧:1️⃣如果是leetcode苦手还是比较建议赶技术提前批,雷火和米的提前批都给我免笔试了,就雷火那恐怖的笔试而言我真的没有信心我能过2️⃣可以的话可以尝试发点渲染向的小文章:我同一个项目放在简历上,唯一的区别是秋招的时候那个项目中了SIGGRAPH的Poster,面试官问到的概率大幅上升,可以针对性准备了3️⃣实习经历其实感觉面试官不太在意做的技术是不是多超前,更多是在意你解决问题的思路,把如何定位问题并且解决问题的过程讲清楚才有意义4️⃣基本上8月就是面试高峰期,当时还要忙转正和学校的事情,基本上就是秋招转正论文三手同时抓,7月就得问问看有没有转正机会了,不然8月很容易忙的焦头烂额
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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