文件拷贝和系统文件遍历
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<dirent.h>
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<errno.h>
#include <fcntl.h>
int copy_regfile(const char* src,const char *des)
{
int fd_src,fd_des;
char buff[1024];
int ret=0;
fd_src=open(src,O_RDONLY);
if(fd_src==-1)return 1;
fd_des=open(des,O_WRONLY | O_TRUNC);
if(fd_des==-1);return 2;
while(1)
{
ret=read(fd_src,buff,sizeof(buff));
if(ret==0 || ret==-1)break;
write(fd_des,buff,ret);
}
close(fd_src);
close(fd_des);
if(ret==-1) return 3;
struct stat st;
stat(src,&st);
chmod(des,st.st_mode);
return 0;
}
int rm_all(char * fname)
{
DIR *fd=opendir(fname);
if(fd==NULL)
{
printf("eero%s\n",fname);
fprintf(stderr,":%s\n",strerror(errno));
return 0;
}
//chdir(fname);
char old_name[600];
//chdir(fname);
getcwd(old_name,sizeof(old_name));
printf("%s\n",old_name);
chdir(fname);
struct dirent *de=NULL;
struct stat st;
while(de=readdir(fd))
{
if(strcmp(de->d_name,".")==0 || strcmp(de->d_name,"..")==0)
{
continue;
}
stat(de->d_name,&st);
if(S_ISREG(st.st_mode))
printf("%s\n",de->d_name);
else if(S_ISDIR(st.st_mode))
{
rm_all(de->d_name);
}
}
closedir(fd);
chdir(old_name);
return 0;
}