【问题标题】:How to check if a file is in a specific directory or its subdirectories in C如何检查文件是否在C中的特定目录或其子目录中
【发布时间】:2018-12-26 17:28:35
【问题描述】:

我正在构建自己的 shell,我想知道:我如何知道命令是否在目录“/bin”及其子目录中。 我想实现一个函数 char* path_to_command(char* commandname) ,它返回参数中给出的命令的路径。

我一直在寻找确定特定文件是否在目录中的函数(如 fopen 或 access)。但是这些函数只是告诉我们文件是否仅在目录中。 我正在考虑使用 fopen 的递归函数,我将不得不使用 strcat 很多时间。 我相信有更好的解决方案。

英语不是我的母语,如有错误非常抱歉。 谢谢你。

【问题讨论】:

标签: c subdirectory


【解决方案1】:

递归函数不要自己写,最好使用标准的nftw

姓名

nftw - 遍历文件树

概要

#include <ftw.h>

int nftw(const char *path, int (*fn)(const char *,
         const struct stat *, int, struct FTW *), int fd_limit, int flags);

描述

nftw() 函数将递归地降低目录层次结构 植根于路径。

但是,对于标准 shell,不需要递归搜索(最糟糕的是,这对任何用户来说都非常奇怪),您只需要在 PATH 环境变量中提到的目录中搜索即可。

【讨论】:

  • 非常感谢!这正是我想要的。谢谢美人!
【解决方案2】:

您不仅可以使用opendir(3) & readdir(3) & closedir,而且您可能希望在字符串中构造一些文件路径(使用字符串例程,如snprintfasprintf ) 并在其上使用stat(2)access(2)(因为readdir 返回一个目录条目,其d_name 将与包含目录的路径结合使用)。

你也可以使用nftw(3)

但是,在 shell 中,您只想迭代 PATH variable 的组件,并将程序名称附加到每个组件。对于这一点,不需要递归下降。还有execvp(3)

【讨论】:

    【解决方案3】:

    需要看目录内容,看函数opendir/readdir/closedir(#include &lt;dirent.h&gt;)

    {编辑添加}

    请注意,当您扫描目录的内容时,您会到达目录“.”。和“..”,不要因为“.”而递归地进入它们。是当前目录,“..”是上层目录(“/”除外,“..”也是“/”)

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 2013-04-07
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2012-06-28
      • 2022-11-21
      相关资源
      最近更新 更多