常使用该方法获取bash命令的的输出,并将输出的文本用于分析,便于执行下面的操作,如本例子就是利用popen实现读取ls -l命令的输出
源码
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
//-rwxrwxrwx 1 root group 64463 Mar 14 09:53 101.jpg\r\n
string data = "";
string cmd = "ls -l ";
cout << "popen:" << cmd << endl;
FILE *f = popen(cmd.c_str(), "r");
if (!f)
return -1;
char buffer[1024] = { 0 };
for (;;)
{
int len = fread(buffer, 1, sizeof(buffer) - 1, f);
if (len <= 0)break;
buffer[len] = '\0';
data += buffer;
}
pclose(f);
cout << data << endl;
return 0;
}
输出结果
andrew@andrew-G3-3590:/work/01_C++基础/01_C++基础/c++基础day03/源码$ ./a.out
popen:ls -l
总用量 92
-rwxrwxr-x 1 andrew andrew 18408 9月 3 00:10 a.out
-rwxrw-r-- 1 andrew andrew 741 7月 22 23:15 dm01_类的构造和析构基础.cpp
-rwxrw-r-- 1 andrew andrew 1209 7月 22 23:15 dm02_构造函数的分类.cpp
-rwxrw-r-- 1 andrew andrew 840 7月 22 23:15 dm03_显示初始化方案.cpp
-rwxrw-r-- 1 andrew andrew 1131 9月 2 23:45 dm04_copy构造函数的调用12.cpp
-rwxrw-r-- 1 andrew andrew 800 7月 22 23:15 dm05_copy构造函数的调用场景3.cpp
-rwxrw-r-- 1 andrew andrew 1459 7月 22 23:15 dm06_copy构造函数的第4种应用场景.cpp
-rwxrw-r-- 1 andrew andrew 1472 7月 22 23:15 dm07_回顾复习.cpp
-rwxrw-r-- 1 andrew andrew 680 7月 22 23:15 dm08_构造函数调用规则研究.cpp
-rwxrw-r-- 1 andrew andrew 893 7月 22 23:15 dm09_深拷贝和浅拷贝.cpp
-rwxrw-r-- 1 andrew andrew 1221 7月 22 23:15 dm10_构造函数初始化列表.cpp
-rwxrw-r-- 1 andrew andrew 1436 7月 22 23:15 dm11_构造和析构综合练习.cpp
-rwxrw-r-- 1 andrew andrew 607 7月 22 23:15 dm12_构造中调用构造.cpp
-rwxrw-r-- 1 andrew andrew 1328 7月 22 23:15 dm13_new和delete.cpp
-rwxrw-r-- 1 andrew andrew 1484 7月 22 23:15 dm14_new和delete深入分析.cpp
-rwxrw-r-- 1 andrew andrew 738 7月 22 23:15 dm15_static关键字.cpp
-rwxrw-r-- 1 andrew andrew 650 7月 22 23:15 dm16_面向对象模型初探.cpp
-rwxrw-r-- 1 andrew andrew 429 7月 22 23:15 dm17_面向对象模型this指针练习.cpp
-rw-rw-r-- 1 andrew andrew 522 9月 3 00:10 test.cpp