手写linux中的cp指令

手写linux中的cp指令

我们平时在Linux环境下复制一个文件,一般都直接用:
cp 文件a 文件b
面试时可能会遇到叫你手写cp指令的情况!

argc用来记录程序启动时就传入的参数个数, char **argv用来记录每个实参的地址注意argv可使用数组也可使用二级指针,且注意类型为char型
一个具有注脚的文本。
用一点简单的代码解释一下 argc 、argv的作用

#include<stdio.h>

int main(int argc,char **argv)
{
        printf("totol prams:%d\n",argc);
        printf("No1.arams:%s\n",argv[0]);
        printf("No2.arams:%s\n",argv[1]);
        printf("No3.arams:%s\n",argv[2]);

        return 0;
}

在命令行界面运行生成的text.out

./text.out first second

之后我们可以看到

在这里插入图片描述
可以看到在./text.out first second命令后有三个参数,第一个是程序名字,第二个是first ,第三个是second,事实证明确实是三个参数,这样就容易理解了吧。是不是很想cp指令的格式

代码的实现

接下来加亿小小点改进。
思路是什么呢?
1.首先我们肯定要打开源文件,src.c
2.读取源文件的内容保存到readbuf中。
3.创建/打开 目标文件des.c
4.将readbuf中的内容写到des.c中
5.关闭两个文件(文件操作最后都需要关闭)
这样就得到了我们要得代码QvQ

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

 int main(int argc,char **argv)
{
        int fdsrc;
        int fddes;
        char *readbuf=NULL;
        if(argc!=3){
                printf("pararm error\n");
                exit(-1);
}
		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,size);
        fdsrc=open(argv[1],O_RDWR);
        lseek(fdsrc,0,SEEK_SET);



        fddes = open(argv[2],O_RDWR|O_CREAT,0600);
        int n_write = (fddes,readbuf,strlen(readbuf));

        close(fdsrc);
        close(fddes);
}

最后让我们看看结果
在这里插入图片描述

### 安装准备 为了确保顺利安装CUDA和cuDNN,在Ubuntu上需先确认系统的兼容性和现有软件包的状态。这包括检查操作系统版本、显卡信息及其驱动状态。 对于操作系统的检测,可以利用命令`uname -m && cat /etc/*release*`来获取架构详情与发行版信息[^4]。而针对显卡的信息收集,则推荐使用`lspci | grep -i nvidia`以识别NVIDIA GPU的存在,并通过`nvidia-smi`进一步了解当前激活的驱动程序版本及性能概况[^1]。 ### 驱动安装 在着手于CUDA之前,保证有适当版本的NVIDIA驱动被正确部署至关重要。通常建议采用官方源中的稳定版或是直接从制造商处下载适用于特定硬件的新近发布版本。执行如下指令序列可实现这一点: ```bash sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update ubuntu-driver autoinstall ``` 上述过程会自动挑选并应用最适合本地设备状况的选择之一[^3]。 ### CUDA Toolkit 的安装 当基础环境搭建完毕之后,便能转向核心组件——即CUDA工具集本身的引入工作上来。依据个人需求选取相匹配的主要分支(比如11.x系列),接着遵循下面给出的操作流程来进行实际部署: #### 方法一:借助APT仓库简化流程 这种方法适合追求便捷性的用户群体。只需依次运行下列语句即可达成目标: ```bash wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda ``` #### 方法二:手动处理.run 文件 如果偏好更精细控制或遇到某些特殊情况时,可以从官方网站获取独立的`.run`脚本形式分发包。不过在此之前务必停用任何现存的图形界面服务以免引起冲突;另外记得按照提示逐步完成交互式向导直至结束。 无论采取哪种途径,最终都应重启计算机使更改生效,并可通过`nvcc --version`检验是否达到预期效果[^2]。 ### cuDNN 库集成 有了稳固的基础平台支持后,下一步就是增添专门面向深度神经网络优化过的数学运算库——cuDNN了。鉴于其紧密依赖于先前建立起来的CUDA框架之上,因此务必要严格对照两者之间的协同关系表单做出恰当选择。 假设已经取得了对应压缩包,那么继续参照下述指导方针推进剩余环节: ```bash tar xvzf cudnn-linux-x86_64-*.*.*_*.* sudo cp cuda/include/cudnn*.h /usr/local/cuda/include/ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64/ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc source ~/.bashrc ``` 至此,整个设置链条宣告完工。此时不妨尝试编译一段简单的测试案例加以验证,例如MNIST手写数字分类器训练作业等,从而直观感受GPU带来的效率提升优势。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值