Linux C实现cp命令

  • 1.分析
  • 2.代码
  • 3.可以改进的地方

1.分析

cp命令本质上是把一个文件的内容复制到另一个文件里面,非快捷方式(软链接),那么很容易想到的就是文件IO,我们需要一直从源文件A读,不停的写到目标文件B当中,就可以了。

2.代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(){//1.设置读文件的文件描述符int srcfd = open("english.txt", O_RDONLY);if(srcfd == -1) {perror("open source file");}//2.设置写文件的文件描述符int dstfd = open("copy.txt", O_WRONLY | O_CREAT, 0777);if(dstfd == -1) {perror("open destination file");}//3.读数据并且写入char buf[1024] = {0};int len = 0;while((len=read(srcfd, buf, sizeof(buf))) > 0) {write(dstfd, buf, len);}//4.关闭文件描述符close(dstfd);close(srcfd);return 0;
}

首先你要确保源文件是存在的,这和cp命令的要求是一样的,然后目标文件的用法采用的是带有权限设置的第二种用法,在写文件的open当中,使用的是open的第一种用法。关于read的函数参数以及返回值都可以通过man文档来获取帮助,比如man 2 open,学会看文档确实事半功倍,相关的头文件,同名函数的一系列用法,参数的具体意义,返回值的情况,不同错误号对应的情况。

3.可以改进的地方

如果想更像cp命令一点,把目标文件和源文件都设置成程序的参数传入,然后对源文件做一个判断。关于创建的目标文件权限,可以使用文件描述符的相关函数获取源文件的相关信息,然后对目标文件设置成一样的权限(比如0755)。

Linux C实现cp命令相关推荐

  1. linux cp -r 参数,Linux系统中cp命令的参数及用法详解

    Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...

  2. linux cp命令忽略覆盖,linux cp:Linux怎么取消cp命令覆盖文件提示

    今天来聊聊一篇关于linux cp:Linux怎么取消cp命令覆盖文件提示的文章,现在就为大家来简单介绍下linux cp:Linux怎么取消cp命令覆盖文件提示,希望对各位小伙伴们有所帮助. 可以试 ...

  3. linux cp命令 强制覆盖,Linux中使用cp命令进行强制覆盖的方法

    cp在拷贝时,如果遇到相同的文件名的文件,就会不断询问是否覆盖,让你输入yes or no .为什么呢?这是为了linux为了安全考虑,在cp命令上用了别名.也就是你输入只是输入cp命令时,其实系统是 ...

  4. linux cp 全覆盖,Linux中使用cp命令进行强制覆盖的方法

    cp在拷贝时,如果遇到相同的文件名的文件,就会不断询问是否覆盖,让你输入yes or no .为什么呢?这是为了linux为了安全考虑,在cp命令上用了别名.也就是你输入只是输入cp命令时,其实系统是 ...

  5. Linux文件目录操作命令-cp命令

    一.cp命令 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参 ...

  6. 在linux终端显示cp命令复制文件时的速度

    cp命令显示拷贝的速度 在window平台上复制一个文件时可以即时查看文件复制时的速度. 在linux平台上查看了cp命令的参数,没有相关参数可以实现此功能,所以需要借助工具来实现此功能. 我平时用的 ...

  7. linux下使用\cp命令的原因

    2019独角兽企业重金招聘Python工程师标准>>> 有时会看到在拷贝文件的时候习惯使用\cp -rf而不是cp -rf,这两者是有区别的:当使用第一种时系统不会提示是否覆盖,第二 ...

  8. 实现Linux下的cp命令

    cp命令的作用:读取源文件写到目标文件 具体实现思路: 1.打开源文件,先判断argc==3,argv[0]为可执行程序的名字,argv[1]为源文件,argv[2]为目标文件 2.当源文件存在的时候 ...

  9. Linux中的cp命令和mv命令

    1.sh:执行.sh结尾的脚本 2.cp:复制文件到指定目录,比如把aa目录下的123.jpg文件复制到bb目录下(复制过后文件在旧文件中存在) cp sourcefile destfile: 文件拷 ...

最新文章

  1. centos 重启网络服务的方法
  2. 【Java源码分析】LinkedList源码分析
  3. 解决oj哈夫曼树问题,学习了priority_queue
  4. NYOJ-最少步数(dfs)
  5. Fedora core 2下建立Poptop服务器以及常见问题
  6. C# WinForm开发系列 - Regular Expression
  7. source insight工程的相对路径
  8. python第三天学习总结
  9. python开始_python开始的一天
  10. java 初始化和清楚_浅谈Java中的初始化和清理
  11. 学习之路十四:客户端调用WCF服务的几种方法小议
  12. 千树万树梨花开:二叉树的实现以及存储结构
  13. linux开启cups服务,Linux中cups打印服务实战设置
  14. 程序设计方法学作业—三天打渔两天晒网程序设计
  15. 测量数据的计算机处理实验报告,测量数据处理实验报告..doc
  16. GOTS认证咨询,对于GOTS/GRS标准还需关注其污染物的排放是否符合要求
  17. Flink中的CEP(二)
  18. Matlab axis函数
  19. 如何解决360极速浏览器主页无法修改问题
  20. 显式锁Lock的集大成之作,最细节教程

热门文章

  1. IPv6是什么意思?哪款堡垒机支持IPv6资产纳管?
  2. 李大大讲话和贴膜成功学
  3. matlab 四元数叉乘,四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数
  4. 微信支付服务端与客户端
  5. 大学毕业学什么专业好就业?当然IT咯
  6. 代理: Agent , Agency , Broker , Proxy
  7. python读取文件按行分割字符串_python在TXT文件中按照某一字符串取出该字符串所在的行方法...
  8. 快速画圆切线lisp_【求助】关于AutoLISP command “line”命令问题(画圆内接正五边形) 不要推荐我使用“polygon”命令...
  9. opencv文字旋转 putText旋转90°
  10. MPU6050教程(转载)