支持文件通配扩展

时间:2012-11-11 19:30:28

标签: c

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

1 个答案:

答案 0 :(得分:0)

POSIX提供支持globbing的功能;标准C没有,微软则完全不同。

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

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

您可以查看<wordexp.h>标题和wordexp()。这对你来说比glob()更有效,但如果它没有被禁止,那将为你节省很多精力。

通常,glob()是最有可能做到你需要的人。但是,由于排除了这一点,也许您可​​以使用fnmatch(),希望您从...获取文件名。实际上,它并不关心从哪里获取名称;它只是验证您提供的名称是否与您指定的文件名模式匹配。

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