C语言实现Linux cp命令

前言

1.linux cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。
2.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。
3. cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
4. cp命令:

// linux终端
cp -[Rrls] 源文件 SOURCE 目标文件 DEST

学习内容

Linux cp 命令的用法。
系统调用 open, opendir 函数的使用
系统调用 careat 函数的使用
系统调用 read, readdir 函数的使用
系统调用 write 函数的使用
系统调用 close 函数的使用
系统调用 open 函数的使用
系统调用 link, symlink 函数的使用
函数 getopt 的使用
C 语言字符串处理

开始

首先我们知道cp后的一系列指令均为命令行参数所以我们需要接收cp后的命令参数这里我们选择getopt(分析命令行参数“unistd.h“头文件)

int getopt(int argc, char * const argv[], const char * optstring);

通俗易懂版链接—超通俗易懂getopt
因为cp后面的选项-[Rrls]无参数所以判断选项代码如下

while ((c = getopt(argc, argv, "rRls")) != -1)
{switch (c){/*若有-r,-R,则将标记递归地复制目录项的选项(opt_r)置为真*/case 'R':case 'r':opt_r = true;break;/*若有-l,则将标记创建硬链接的选项(opt_l)置为真*/case 'l':opt_l = true;break;/*若有-s,则将标记创建符号链接的选项(opt_s)置为真*/case 's':opt_s = true;break;}
}

文件或目录拷贝

cp最主要的功能就是进行文件拷贝,显然读操作时(读源文件时是读操作)需要用到open() system_call,对于open()的运用我也贴一个link链接—open系统调用详解,而拷贝后写文件到目标文件则是通过read()和write()读入写入完成复制
文件拷贝整体代码如下

int copyF2F(char *src_file, char *dest_file)
{int in_fd, out_fd, n_chars;char buf[BUFFERSIZE];/*如果目标文件是一个目录,那么默认是在该目录下建立一个与源文件同名的文件*/if (isdir(dest_file)) {    char c;char temp[10] = { '\0' };char *r_temp;int n = strlen(src_file);int m = 0;/*读取源文件的最后一级文件名作为目标文件名*/while ((c = src_file[n - 1]) != '/') {temp[m] = c;m++;n--;}r_temp = strrev(temp);strcat(dest_file, r_temp);}/* 以可读模式打开源文件 */if ((in_fd = open(src_file, O_RDONLY)) == -1){printf("%s文件读取失败!",src_file);return 1;    }/* O_WRONLY代表以读写的方式打开目标文件,O_CREAT选项代表若文件不存在则创建,COPYMORE = 0644,文件所有者可读可写,其他可读 */if ((out_fd = open(dest_file, O_WRONLY | O_CREAT, COPYMORE)) == -1)return 1;/* 通过read和write系统调用实现文件的复制 */while ((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0){if (write(out_fd, buf, n_chars) != n_chars){printf("%s文件写失败!", dest_file);return 1;}if (n_chars == -1){printf("%s文件读取失败!", src_file);return 1;}}/* 关闭文件 */if (close(in_fd) == -1 || close(out_fd) == -1){printf("文件关闭失败!");return 1;}return 0;
}

同理目录拷贝原理类似但考虑到递归需要对指针有一定的了解

最后

最后就是主函数的封装,这一部分就需要一定的想象力,对比自己在Linux终端上输入命令出现的错误不断地完善自己的判断语句做到对每一种结果都有返回而不是无响应,最终成型代码在我的Github上喜欢的可以点个star!!!
归档完毕
zyb666-omg的GitHub

斌酱归档---C语言实现Linux cp命令相关推荐

  1. linux cp命令 前面,盘点Linux命令之Linux cp命令使用大全

    Linux命令有很多,其中Linux cp命令常用的一种,Linux cp命令如何使用,下面IT培训网将为您盘点有关Linux命令之Linux cp命令大全. Linux命令之Linux cp命令详解 ...

  2. linux文件的操作原理简介 以及 实现linux cp命令的代码

    1.文件操作原理简介 他可以这样写代码 因为咱们只读了五个字节  所以多的读不出来          简单的说open 静态文件后产生动态文件 2.实现linux cp命令的代码 原理 用代码实现出来 ...

  3. Linux cp命令 拷贝文件

    版权声明:本文为博主原创文章,未经博主允许不得转载. Linux cp命令拷贝命令非常实用,cp命令可以将指定路径下的文件(目录)拷贝到(成)另一文件或目录中,相当于DOS下COPY和XCOPY命令. ...

  4. linux cp命令强行覆盖复制

    linux cp命令强行覆盖复制 我们平常在Linux中使用 cp 命令时,会发现将一个目录中文件复制到另一个目录具有相同文件名称时,即使添加了 -rf 参数强制覆盖复制时,系统仍然会提示让你一个个的 ...

  5. linux cp -ip,linux cp命令

    五分钟学会使用Linux cp命令 Linux中使用cp命令复制文件(夹),本文就日常工作中常用的cp命令整理如下. 一.复制一个源文件到目标文件(夹). 命令格式为:cp 源文件 目标文件(夹) 这 ...

  6. Linux cp命令的使用方法与参数含义

    1.Linux cp命令 拷贝文件 https://blog.csdn.net/sqbzo/article/details/9000027 2.linux复制指定目录下的全部文件到另一个目录中,lin ...

  7. linux cp备份命令,Linux cp命令使用详解

    今天要和大家分享的Linux常用命令是cp命令,Linux cp命令常常被用于复制文件或目录,如同时指定两个以上的文件或目录,且后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此 ...

  8. linux命令cp建立硬链接,Linux cp命令学习

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...

  9. c语言 touch新建文件,C 语言实现 Linux touch 命令

    南通大学信息科学技术学院 实验名称:实验十一 C语言实现Linux touch命令 实验日期:2020年6月24日 班级:物联网182 姓名:陈宇腾 学号:1813061044 一.实验预习报告 1. ...

最新文章

  1. tensorflow LSTM + CTC实现端到端OCR
  2. web网页获取,cookie 的管理,post和get方式的模拟。
  3. 取出list中属性_你是否用过List<T>和List<?>?
  4. JAVA学习:maven开发环境快速搭建How to download J2EE API (javaee.jar) from Maven
  5. Spark Streaming 实战案例(二) Transformation操作
  6. java 打印 模板_Java输入输出模板
  7. python矩阵函数_NumPy 矩阵库函数
  8. git指令如何葱master转到dev_小姐姐用动画图解Git命令,一看就懂!
  9. 【渝粤教育】国家开放大学2018年秋季 2409T中国古代文学(B)(1) 参考试题
  10. ArcGIS操作:矢量shp编辑
  11. CorelDRAWX4的VBA插件开发(二十二)选择路径创建文件和移动文件
  12. Maven的安装和适配使用教程-保姆级
  13. 网络编程实战-极客时间
  14. 到全国各省市关于公务员考试的信息
  15. dropbox连接不上解决方法
  16. Unity--Configurable Joint——实战带你了解可配置关节
  17. Unity3D+moba+技能指示器(二)
  18. 迁移学习基础知识整理
  19. 【图床】图床、PicGo进行图片管理与上传
  20. 前端,值得收藏的那些网站

热门文章

  1. 微信小程序获取当前的位置地名
  2. Web服务器控件和HTML控件区别
  3. HOG_SVM_行人检测数据集合_INRIA数据集
  4. 2021章节练习基础(案例精选)1-10
  5. 阿里Mycat 和京东ShardingSphere:分布式数据库中间件哪家强?
  6. Jasperreports的XSD翻译
  7. Linux系统克隆和快照
  8. windows10 系统下一些exe图标变成白色的解决办法
  9. ERP软件与电算化软件及其购销存系统的比较(转)
  10. unity物体自身轴旋转_unity3D中物体实现任意角度自旋转