C/C++实现读取当前文件夹下的文件-popen

常使用该方法获取bash命令的的输出,并将输出的文本用于分析,便于执行下面的操作,如本例子就是利用popen实现读取ls -l命令的输出

源码

#include 
#include 


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


你可能感兴趣的:(linux)