从C ++中的exec命令获取字符串输出

时间:2014-05-10 20:57:07

标签: c++ c++11

我的问题非常简单,但我似乎无法找到任何直接或特定于我想要做的事情。我只是使用execl列出当前文件夹中遵循相同模式的文件(即execl(“ls nameOfFile * .txt”))。我现在要做的是获取这些文件名,以便我可以循环并从中获取数据。有一个简单的方法吗?我使用正确的执行官吗?

感谢您提供任何帮助或提示。

1 个答案:

答案 0 :(得分:1)

execl的签名是

int execl(const char *path, const char *arg, ...);

您应该将路径作为第一个参数传递给可执行文件,并将可执行文件的参数作为后续参数传递,因此您的调用语法是错误的。即使你解决了这个问题,它仍然不会做你想做的事情。 execl和朋友永远将控制权返回给调用程序的唯一方法是发生错误。 This answer包含对execl所做内容的出色解释。

您可能正在考虑std::system,您可以将任意字符串传递给它,并让操作系统执行该命令。虽然这会将文件名打印到stdout,但它仍然不是您想要的,因为system返回执行您指定的命令行而产生的错误代码,它无法捕获并返回任何可能被命令写入stdout的东西。

不幸的是,C ++标准库(尚未)中没有任何内容允许您列出和迭代文件系统中的文件。首选的跨平台方法是使用Boost.Filesystem。否则,可以使用特定于平台的API,这些API在this answer中列出,以及Boost用法示例。