我遇到了执行* .txt通配符的问题,并且阅读此主题 - exec() any command in C - 表明由于“全局”问题而难以解决。有没有简单的方法来解决这个问题?
这是我正在尝试做的事情:
char * array[] = {"ls", "*.txt", (char *) NULL };
execvp("ls", array);
答案 0 :(得分:5)
您可以使用系统命令:
system("ls *.txt");
让shell为你做斑点。
答案 1 :(得分:2)
要回答此问题,您必须了解在终端(模拟器)中键入ls *.txt
时发生的情况。当键入ls *.txt
命令时,shell
正在解释它。然后shell
执行目录列表,并将目录中的文件名与*.txt
模式匹配。只有完成上述所有操作后,shell
才会将所有文件名作为参数进行准备,并生成一个新进程,将这些文件名作为argv
数组传递给execvp
调用。
为了自己组装类似的东西,请查看以下问答:
fnmatch()
将文件名与类似shell的通配符模式匹配。vfork()
和exec(3)
系列函数之一运行另一个程序。或者,您可以使用system()
函数,如@ manu-fatto所建议的那样。但是这个函数会做一些不同的事情 - 它实际上会运行shell
程序来评估ls *.txt
语句,而{{1}}语句将执行类似于我上面描述的步骤。它可能效率较低,可能会引入安全漏洞(有关详细信息,请参见手册页,安全风险在 NOTES 部分中说明,并建议在某些情况下不使用上述功能)。< / p>
希望它有所帮助。祝你好运!