• Linux下用c语言实现whereis.


    简单的一个whereis的实现,代码如下:

     1 #include <stdio.h>
     2 #include <errno.h>
     3 #include <dirent.h>
     4 #include <sys/types.h>
     5 #include <sys/stat.h>
     6 void dir_scan(char *path, char *file, char * fileToSearch);
     7 int count = 0;
     8 
     9 int main(int argc, char *argv[])
    10 {
    11     struct stat s;
    12     if(argc != 3){
    13         printf("error argu!");
    14         exit(1);
    15     }
    16     if(lstat(argv[1], &s) < 0){
    17         printf("lstat error!");
    18         exit(2);
    19     }
    20     if(!S_ISDIR(s.st_mode)){
    21         printf("This is not a dir name!
    ");
    22         exit(3);
    23     }
    24     dir_scan("", argv[1], argv[2]);
    25     exit(0);
    26 }
    27 
    28 
    29 void dir_scan(char * path, char * file, char * fileToSearch)
    30 {
    31     struct stat s;
    32     DIR * dirPtr;
    33     struct dirent * dtPtr;
    34     char dirName[1000];
    35     memset(dirName, 0, 1000 * sizeof(char));
    36     strcpy(dirName, path);
    37 
    38     if(lstat(file, &s) < 0){
    39             printf("asdasdad");
    40              // fprintf(stdout, "The reason is %s	 ", strerror(errno));
    41            exit((4));
    42        }
    43     if(S_ISDIR(s.st_mode)){
    44        strcat(dirName, file);
    45        strcat(dirName, "/");
    46        // printf("now the dir name is %s
    ", file);
    47        if((dirPtr = opendir(file)) == NULL){
    48             printf("open dir error!
    ");
    49             exit(5);
    50             printf("The count now is %d
    ", count);
    51        }
    52        if(chdir(file) < 0){
    53             printf("chdir error!
    ");
    54             exit(6);
    55        }
    56        while((dtPtr = readdir(dirPtr)) != NULL){
    57             if(dtPtr->d_name[0] == '.')
    58                 continue;
    59             dir_scan(dirName, dtPtr->d_name, fileToSearch);
    60        }
    61        if(dirPtr != NULL)
    62             closedir(dirPtr);
    63        if(chdir("..") < 0){
    64             printf("chdir error!
    ");
    65             exit(7);
    66        }
    67     }else{
    68           if(strstr(file, fileToSearch) != NULL && (!strstr(file, "."))){
    69                 printf("%s%s
    ", dirName, file);
    70                 // printf("adasdadad
    ");
    71           }
    72         count++;
    73     }
    74 }
  • 相关阅读:
    MySQL之PXC集群
    MySQL大表查询未走索引异常分析
    Redis场景应用之UA池
    MySQL日志剖析
    Redis场景应用之排行榜
    MySQL B+树索引解析
    Redisson分布式锁剖析
    关键字替代符号C++
    并查集按秩合并
    POJ3048
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4928098.html
Copyright © 2020-2023  润新知