对于我的学校项目,我正在尝试实现 *.jpg、*.c 等扩展名的文件通配。为此,我必须使用 readdir(2) 和 getdents(3) 等函数来读取当前目录中的所有文件,然后使用 strstr(3) 来匹配它们,然后将它们添加到传递给 exec(2) 的参数列表中。我不打算使用 glob (3)。我应该如何实现这个?
最佳答案
POSIX 提供了支持通配符的函数;标准 C 没有,而 Microsoft 的做法完全不同。
标题 <fnmatch.h>
和函数 fnmatch()
可能是答案的一部分;这允许您使用opendir()
, readdir()
和closedir()
扫描目录并根据 glob 模式匹配文件名的函数。
如果不是问题中的禁令,你可能会发现 <glob.h>
header 和 glob()
功能比较合适。
您可以查看 <wordexp.h>
标题和 wordexp()
。这比 glob()
为您做更多的工作。确实如此,但如果不被禁止,会节省你很多精力。
通常,glob()
是最有可能满足您的需要的一个。然而,既然这被排除了,也许你可以使用 fnmatch()
它希望您从...获取文件名……实际上,它并不关心您从哪里获取文件名;它只是验证您提供的名称是否与您指定的文件名模式匹配。
如果您不打算使用其中任何一个,那么您将必须实现足够的正则表达式来匹配您期望识别的 shell glob,并且仍然使用 readdir()
等等来检查可用的名称。
关于c - 支持扩展名的文件通配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13334610/