***实现“cp 原文件 目标文件”功能
先来复习一下Linux cp 命令:
Linux cp 命令:主要用于复制文件或目录。
参数:
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。
- -i:与 -f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -l:不复制文件,只是生成链接文件。
编程思想:
- 通过main的参数传入源文件和目标文件,所以需要判断argc==3,不是则退出!
- 源文件需要的权限是读就可以了,用O_RDONLY表示读
- 目标文件需要写权限,用O_WRONLY
- 定义两个文件描述符
- 定义一个缓冲区,来保存源文件的内容
- 定义一个num,来保存文件内容的大小
- open()对两个文件进行打开
- 先读源文件的内容到缓冲区,再使用循环while,把缓冲区中的内容写入到目标文件中
- 最后关闭文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int source,target;
int num;
char buf[10];
if(argc!=3){
printf("args less");
exit(1);
}
source = open(argv[1],O_RDONLY);
target = open(argv[2],O_WRONLY|O_CREAT,0644);
num=read(source,buf,10);
while(num != 0)
{
write(target,buf,num);
num = read(source,buf,10);
}
close(source);
close(target);
}