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