2

我在执行 *.txt 通配符时遇到问题,并且阅读此线程 - C 中的 exec() 任何命令- 表明由于“通配符”问题,这很困难。有什么简单的方法可以解决这个问题吗?

这是我正在尝试做的事情:

char * array[] = {"ls", "*.txt", (char *) NULL };
execvp("ls", array);
4

2 回答 2

5

你可以使用系统命令:

system("ls *.txt");

让 shell 为你做 globbing。

于 2013-01-23T00:17:27.213 回答
2

为了回答这个问题,您必须了解在您输入ls *.txt终端(模拟器)时发生了什么。键入命令时ls *.txt,它正在由shell. 然后shell执行目录列表并将目录中的文件名与*.txt模式匹配。只有在完成上述所有操作后,才shell准备所有文件名作为参数并生成一个新进程,将这些文件名作为argv数组传递给execvp调用。

为了自己组装类似的东西,请查看以下 Q/A:

或者,您可以使用system()@manu-fatto 建议的功能。但是这个函数会做一些不同的事情——它实际上会运行shell程序来评估ls *.txt语句,而语句又会执行类似于我上面描述的步骤。它可能效率较低,并且可能会引入安全漏洞(有关更多详细信息,请参见手册页,安全风险在NOTES部分中说明,并建议在某些情况下不要使用上述功能)。

希望能帮助到你。祝你好运!

于 2013-01-23T00:30:00.947 回答