C语言实现Linux cp命令

    xiaoxiao2021-03-26  31

    1.分析所需功能

    文件到文件(参数:两个文件名) 1.文件到文件的复制 2.文件到文件的硬链接(-l) 3.文件到文件的软链接(-s)文件到目录(参数:一个文件名,一个目录名) 1.文件到目录的复制 2.新目录下建立文件硬链接(-l) 3.新目录下建立文件软链接(-s)目录到目录 1.目录的递归复制(-r)

    2. 功能函数的实现

    文件到文件的复制

    copyF2F(char * src, char *dst) { int in_fd, out_fd, n_chars; char buf[BUFFERSIZE]; /*如果目标文件是一个目录,那么默认是在该目录下建立一个与源文件同名的文件*/ if (isdir(dest_file)) { char c; char temp[10] = { '\0' }; char *r_temp; int n = strlen(src_file); int m = 0; /*读取源文件的最后一级文件名作为目标文件名*/ while ((c = src_file[n - 1]) != '/') { temp[m] = c; m++; n--; } r_temp = strrev(temp); strcat(dest_file, r_temp); } }为文件建立硬链接 link(src, dst) 为文件建立软链接 smlink(src, dst)

    4.目录到目录的复制 “` int copyD2D(char *src_dir, char *dest_dir) { DIR *dp = NULL; struct dirent *dirp; char tempDest[256]; char tempSrc[256]; strcpy(tempDest, dest_dir); strcpy(tempSrc, src_dir);

    /*使用opendir函数打开src_dir目录,获得指向该目录名字的指针*/ if ((dp = opendir(src_dir)) == NULL) return 1; else { /*使用readdir函数读取dp所指代目录的目录项,获得指向下一个dirent结构的指针*/ while ((dirp = readdir(dp))) { struct stat file_stat; if (!isdir(dirp->d_name)) { /*将dirent结构中的d_name成员变量链接到上级目录字符串*/ strcat(tempDest, dirp->d_name); strcat(tempSrc, dirp->d_name); /*此处转换为文件复制函数的方式处理目录复制*/ copyF2F(tempSrc, tempDest); /*通过字符串拷贝函数,将tempDest和tempSrc还原为上级的目录名*/ strcpy(tempDest, dest_dir); strcpy(tempSrc, src_dir); } } /*关闭目录*/ closedir(dp); return 0; }

    “`

    转载请注明原文地址: https://ju.6miu.com/read-662608.html

    最新回复(0)