zoukankan      html  css  js  c++  java
  • 模拟实现pwd命令

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <sys/stat.h>
     4 #include <dirent.h>
     5 #include <errno.h>
     6 
     7 bool isRoot(const char* path)
     8 {
     9     if (strcmp(path, "/") == 0)
    10         return true;
    11 
    12     char pp[256] = {0};
    13 
    14     int l = strlen(path);
    15     strcpy(pp, path);
    16     
    17     if (pp[l - 1] != '/')
    18     {   
    19         pp[l] = '/';
    20         l += 1;
    21     }   
    22 
    23     strcat(pp, "../");
    24 
    25     struct stat ps; 
    26     stat(pp, &ps);
    27 
    28     struct stat cs; 
    29     stat(path, &cs);
    30 
    31     return ps.st_ino   ==  cs.st_ino &&
    32            ps.st_nlink ==  cs.st_nlink &&
    33            ps.st_mtime ==  cs.st_mtime;
    34 }
    35 
    36 void printPath(const char* path)
    37 {
    38     if (isRoot(path))
    39     {
    40         printf("/");
    41         return;
    42     }
    43 
    44     char pp[256] = {0};
    45 
    46     int l = strlen(path);
    47     strcpy(pp, path);
    48 
    49     if (pp[l - 1] != '/')
    50     {
    51         pp[l] = '/';
    52         l += 1;
    53     }
    54 
    55     strcat(pp, "../");
    56     printPath(pp);
    57 
    58     DIR* dp = opendir(pp);
    59     if (!dp)
    60     {
    61         printf("Failed to open dir %s
    ", pp);
    62         return;
    63     }
    64 
    65     struct stat s;
    66     stat(path, &s);
    67 
    68     char cp[256];
    69     while (dirent* en = readdir(dp))
    70     {
    71         memset(cp, 0, sizeof(cp));
    72         strcpy(cp, pp);
    73         strcat(cp, en->d_name);
    74 
    75         struct stat cs;
    76         stat(cp, &cs);
    77 
    78         if (cs.st_ino == s.st_ino && cs.st_mtime == s.st_mtime)
    79         {
    80             printf("%s/", en->d_name);
    81             break;
    82         }
    83     }
    84 }
    85 
    86 int main(int argc, char* argv[])
    87 {
    88     printPath("./");
    89     printf("
    ");
    90     return 0;
    91 }
  • 相关阅读:
    SuperSubScriptHelper——Unicode上下标辅助类
    IniHelper——INI操作辅助类
    跨站脚本 XSS<一:介绍>
    Vim入门教程
    Linux学习进阶路线图
    web过滤器中获取请求的参数(content-type:multipart/form-data)
    代码注释模板
    log4j:WARN No appenders could be found for logger
    mysql exists 和 in的效率比较
    JSP的隐式对象
  • 原文地址:https://www.cnblogs.com/nuoforever/p/14037281.html
Copyright © 2011-2022 走看看