首页 > 学院 > 开发设计 > 正文

C语言实现Linux cp命令

2019-11-11 06:19:04
字体:
来源:转载
供稿:网友

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;}

“`


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表