Linux C实现cp命令

Linux C实现cp命令

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

猜你喜欢

转载自blog.csdn.net/qq_43847153/article/details/128499825