0

对于我的学校项目,我正在尝试为 *.jpg、*.c 等扩展名实现文件通配。为此,我必须使用 readdir(2) 和 getdents(3) 等函数从当前目录读取所有文件,然后使用 strstr(3) 匹配它们,然后将它们添加到传递给 exec(2) 的参数列表中。我不应该使用 glob (3)。我应该如何实现这个?

4

1 回答 1

0

POSIX 提供了支持通配符的函数;标准 C 没有,微软的做法完全不同。

标题<fnmatch.h>和功能fnmatch()可能是答案的一部分;这允许您使用opendir(),readdir()closedir()函数来扫描目录并将文件名与您的 glob 模式匹配。

如果不是因为问题中的禁止,您可能会发现<glob.h>标题和glob()功能更合适。

您可以查看<wordexp.h>标题和wordexp(). 这对你来说比做的工作更多glob(),但如果不被禁止,会为你节省很多精力。

通常,glob()最有可能满足您的需求。但是,既然排除了这一点,也许您可​​以使用fnmatch()which 期望您从中获取文件名……好吧,实际上,它并不关心您从哪里获取名称;它只是验证您提供的名称是否与您指定的文件名模式匹配。

如果您不打算使用其中任何一个,那么您将必须实现足够的正则表达式来匹配您期望识别的 shell glob,并且仍然使用readdir()etc 来检查可用名称。

于 2012-11-11T19:56:51.460 回答