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)。