如何使用POSIX在C ++中执行命令并获取命令输出?

您可以使用popen和pclose函数与进程进行管道传输。该popen()函数通过创建管道,派生和调用外壳程序来打开进程。我们可以使用缓冲区读取stdout的内容,并将其附加到结果字符串中,并在进程退出时返回此字符串。

示例

#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>

using namespace std;

string exec(string command) {
   char buffer[128];
   string result = "";

   //打开管道文件
   FILE* pipe = popen(command.c_str(), "r");
   if (!pipe) {
      return "popen失败了!";
   }

   //读到过程结束:
   while (!feof(pipe)) {

      //使用缓冲区读取并添加到结果
      if (fgets(buffer, 128, pipe) != NULL)
         result += buffer;
   }

   pclose(pipe);
   return result;
}

int main() {
   string ls = exec("ls");
   cout << ls;
}

输出结果

这将给出输出-

a.out
hello.cpp
hello.py
hello.o
hydeout
my_file.txt
watch.py