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