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

Getting the string(s) output from an exec command in C++

本文关键字:获取 字符串 输出 命令 c++ 中的 exec      更新时间:2023-10-16

我的问题很简单,但我似乎找不到任何直接或具体到我想做的事情。我只是简单地使用execl来列出当前文件夹中遵循相同模式的文件(即execl("ls nameOfFile*.txt"))。我现在要做的是获取这些文件名,这样我就可以遍历并从中获取数据。有什么简单的方法吗?我用对执行官了吗?

谢谢你的帮助和提示。

execl的签名为

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

您应该将可执行文件的路径作为第一个参数传递,并将可执行文件的参数作为后续参数传递,因此您的调用语法是错误的。即使你解决了这个问题,它仍然不会像你想的那样。execl和友元将控制权返回给调用程序的唯一方式是发生错误。这个答案很好地解释了execl的作用。

您可能想到了std::system,您可以向其传递任意字符串,并让操作系统执行该命令。虽然这将把文件名打印到stdout,但这仍然不是您想要的,因为system返回执行您指定的命令行导致的错误代码,它无法捕获和返回命令可能写入stdout的任何内容。

不幸的是,c++标准库(目前)中没有任何东西允许您从文件系统中列出和迭代文件。首选的跨平台方法是使用Boost.Filesystem。除此之外,还有一些特定于平台的api可用,在本回答中列出了它们,以及一个Boost使用示例。