C语言实现cp -r --parents拷贝文件和文件夹

本文介绍了如何使用POSIX标准的C语言实现`cp -r --parents`的功能,即在Linux下复制文件和文件夹时保持原有的目录结构。文中详细讲解了filetype函数用于检查文件类型,并探讨了copy_dir函数在处理不同目录和文件情况时的逻辑,但由于复杂性和潜在的错误,代码可能存在多个问题和BUG。
摘要由CSDN通过智能技术生成

    linux下cp -r --parents为回溯的拷贝文件夹,同时复制时保留文件的目录结构。下面用posix标准的C语言来实现它。

    filetype函数用来检测指定目录下面的文件是否存在,如果存在的话,是那种类型的文件。函数返回'n'表示文件不存在,返回b,c,d,p,l,f,s,u分别表示block文件,字符设备文件,文件夹,管道,链接,常规文件,socket文件以及未知类型文件。代码如下:

char filetype(char * file_name){

	if(access(file_name,R_OK)!=0){
		printf("file %s not exist!",file_name);
		return 'n';
	}else{
		struct stat filestat={};
		int return_state=stat(file_name,&filestat);
		if(return_state<0){
			perror("stat");
			exit(1);
		}

		switch (filestat.st_mode & S_IFMT) {
			case S_IFBLK:  printf("%s:block device\n",file_name);            return 'b';      
			case S_IFCHR:  printf("%s:character device\n",file_name);        return 'c';  
			case S_IFDIR:  printf("%s:directory\n",file_name);               return 'd'  ;
			case S_IFIFO:  printf("%s:FIFO/pipe\n",file_name);               return 'p';
			case S_IFLNK:  printf("%s:symlink\n",file_name);                 return 'l';
			case S_IFREG:  printf("%s:regular file\n",file_name);            return 'f';
			case S_IFSOCK: printf("%s:socket\n",file_name);                  return 's';
			default:       printf("%s:unknown?\n",file_name);                return 'u';
		}
	}
}

   copy_file_posix函数 是linux c语言的单个文件复制函数,使用open,write函数,符合posix标准。</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值