常使用该方法获取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