Linux下写一个自己的cp命令—mycp命令
学习Linux过程中,学习open函数时,会碰到实现一个mycp命令,也就是动手实现一个简单的cp命令,功能是Linux下cp命令的缩减版。
一、分析需求
Linux下的cp命令:
1.cp命令的基本用法: cp 源文件 目标文件
2.如果目标文件不存在 就创建, 如果存在就覆盖
3.实现一个cp命令其实就是读写文件的操作:
(1)对于源文件: 把内容全部读取到缓存中,用到的函数read
(2)对于目标文件: 把缓存中的内容全部写入到目标文件,用到的函数write
二、代码写作思路
1.打开源文件,打开读取权限,准备拷贝
2.打开准备拷贝到的目标文件,若文件不存在,则创建目标文件,开启读写权限
3.读取源文件,存储到缓冲区
4.将缓冲区内容写入目标文件
5.判断是否完成文件复制,完成则退出
6.关闭源文件,和目标文件
三、代码
// An highlighted block
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
int main(char argc,char *argv[])
{
//判端参数是否正确,否则退出
if(argc!=3)
{
printf("./a.out file_name1 file_name2\n");
return -1;
}
int fd_src;//源文件
int fd_aim;//复制到的目标文件
//打开源文件
fd_src=open(argv[1],O_RDONLY);
//判断源文件是否打开成功
if(fd_src<0)
{
printf("file_name1 open fail! ");
return -2;
}
//打开目标文件,O_TRUNC:若文件存在,直接覆盖,否则创建(O_CREAT)
fd_aim=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT,0666);
char buf[256];//文件存储缓冲区
int ret; //读取文件内容长度
while(1)
{
ret=read(fd_src,buf,sizeof(buf));
write(fd_aim,buf,ret);
//判断是否文件读取结束
if(ret!=256)
break;
}
//关闭打开的源文件和目标文件
close(fd_src);
close(fd_aim);
return 0;
}