c语言,找到你想要的文件,进行复制、盗墓者是个丑奴儿

阅读: 评论:0

c语言,找到你想要的文件,进行复制、盗墓者是个丑奴儿

c语言,找到你想要的文件,进行复制、盗墓者是个丑奴儿

//盗墓者是个丑奴儿,原

//博主个人网站 :

//打完一波小广告,进入正题

 

//头文件引入

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <dirent.h>
#include <dirent.h>

 

//函数申明

int opend(const char * pathname);
void judge(char * pathname);
char * str(const char * str1,const char * str2);
void readf(const char * pathname);

DIR * dir=NULL;

 

//参数:pathname,opend()打开pathname路径,如果是文件调用:judge()进行文件拷贝,如果是目录调用:str()进行递归目录

int opend(const char * pathname){
        dir=opendir(pathname);
        if(dir==NULL)
        return -1;
        struct dirent * reado=NULL;
        while((reado=readdir(dir))!=NULL){
                char * tmps=NULL;
                if(reado->d_name[0]=='.')
                continue;
                tmps=str(pathname,reado->d_name);
                if(reado->d_type==DT_DIR){
                        readf(tmps);
                }else{
                        judge(tmps);
                }
                if(reado==NULL)
                free(tmps);
        }
}
 

//参数:pathname,readf()对pathname进行递归,如果是文件调用:judge()进行文件拷贝,如果是目录:自调

void readf(const char * pathname){
        DIR * dir=opendir(pathname);
        struct dirent * reado=NULL;
        while((reado=readdir(dir))!=NULL){
                char * tmps=NULL;
                if(reado->d_name[0]=='.')
                continue;
                tmps=str(pathname,reado->d_name);
                if(reado->d_type==DT_DIR){
                        readf(tmps);
                }else{
                        judge(tmps);
                }
                if(reado==NULL)
                free(tmps);
        }
}

 

//参数:pathname,pathname是文件的路径

//1:judge对pathname进行拷贝

//2:strstr()先过滤出stu.java

//3:pathname[strlen(pathname)-1]='';将最后一个字符/截掉

//4:open打开pathname,read读取内容

//5:open在打开新文件a.txt,O_CREAT如果不存在就创建,O_EXCL如果存在就不创建,0666创建的权限

//6:根据open新打开文件a.txt的文件描述符,write写入open(pathname)读取到的内容

void judge(char * pathname){
        if(strstr(pathname,"stu.java")!=NULL){
        printf("stu.java path : %s n",pathname);
        pathname[strlen(pathname)-1]='';
        int fd=open(pathname,O_RDWR);
        char ar[100]={0};
        read(fd,ar,sizeof(ar));
        int ffd=open("./a.txt",O_RDWR|O_CREAT|O_EXCL,0666);
        write(ffd,ar,strlen(ar));
        close(fd);
        close(ffd);
        }

}
 

//参数:str1,路径,str2,路径,str()作用:拼接路径,并在路径末尾加/

//例:/usr,与home,返回/usr/home/

char * str(const char * str1,const char * str2){
        int size1=strlen(str1);
        int size2=strlen(str2);
        char * arr=(char *)malloc(size1+size2+2);
        memset(arr,'0',size1+size2);
        memcpy(arr,str1,size1);
        memcpy(&(arr[size1]),str2,strlen(str2));
        arr[size1+size2]='/';
        return arr;
}

//main测试

int main(int arg,char ** arv){

        if(arv[1]!=NULL)
        opend(arv[1]);

        return 0;

}
 

运行结果:

1:pwd获得当前路径,ls查看当前路径下的文件(并没有a.txt),编译代码运行可执行文件

2:stu.java path:...,找到了stu.java的所在路径。ls查看当前目录下文件,多了个a.txt,cat查看文件内容&#是stu.java的内容,初步达到结果

本文发布于:2024-01-29 13:12:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650514315520.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:是个   你想要   语言   文件   丑奴儿
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23