使用系统IO函数实现一个目录下所有文件的拷贝
例如 ./cp_dir /bin /home
意为把/bin目录下所有文件拷贝到 /home目录下,尝试的时候一定用新建的目录尝试,否则使用不当会造成文件丢失。
代码如下:
#define _DEFAULT_SOURCE
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>
#include <dirent.h>
#include<string.h>
#include <unistd.h>
#define BUF_SIZE 4096
bool cp_dir(char const *src, char const *dst);
bool cp_file(char const *src, char const *dst);
int main(int argc, char *argv[]) {
if(argc != 3) {
printf("格式错误,请输入./cp_dir 源目录路径 目标路径 的格式\n");
return -1;
}
bool ret = false;
ret = cp_dir(argv[1], argv[2]);
if(ret == false) {
printf("cp失败\n");
}
else {
printf("cp成功\n");
}
return 0;
}
/**
* @brief 目录复制
*
* @param src 源目录的路径
* @param dst 目标目录的路径
* @return true 复制成功
* @return false 复制失败
*/
bool cp_dir(char const *src, char const *dst) {
int ret = -1;
//如果不存在目标目录,则先创建目标文件夹
if(opendir(dst) == NULL) {
ret = mkdir(dst, 0777);
if(ret == -1) {
perror("mkdir error");
return false;
}
}
//先打开一个目录,然后判断里面的每一项,如果是其他文件,直接cp,如果是目录,递归调用本函数
DIR *dir = NULL;
struct dirent *dir_ent = NULL;
dir = opendir(src);
if(dir == NULL) {
perror("op