如何在C中execvp ls * .txt

时间:2013-01-23 00:15:43

标签: c shell wildcard ls execvp

我遇到了执行* .txt通配符的问题,并且阅读此主题 - exec() any command in C - 表明由于“全局”问题而难以解决。有没有简单的方法来解决这个问题?

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

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

2 个答案:

答案 0 :(得分:5)

您可以使用系统命令:

system("ls *.txt");

让shell为你做斑点。

答案 1 :(得分:2)

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

为了自己组装类似的东西,请查看以下问答:

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

希望它有所帮助。祝你好运!