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