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标准。</