C++|Linux工作笔记-C++获取Linux中shell命令结果

标签: C++  Linux  Shell

目录

 

 

基本概念

代码与实例


 

基本概念

这里首先介绍一条Linux函数:

ps -ef | awk '{print $2,$8,$9,$10}'

这个可以当前Linux系统运行的进程

另外一个知识点:

在Linux中一般使用这种方式获取shell命令的结果:

FILE *fp;
fp = popen("ps -ef | awk {'print $2,$8,$9,$10'}", "r");
if(!fp){

        cout << "popen failed" << endl;
        return 0;
}

popen函数类似Windows中的system

popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。

最后一个知识点是std中的string字符串分割。

typedef vector<string> StringList;

StringList splitstr(string &str, char tag){

        StringList retVec;
        string subStr;

        for(size_t i = 0; i < str.length(); i++){

                if(tag == str[i]){

                        if(!subStr.empty()){

                                retVec.push_back(subStr);
                                subStr.clear();
                        }
                }
                else{

                        subStr.push_back(str[i]);
                }
        }

        if(!subStr.empty()){

                retVec.push_back(subStr);
        }

        return retVec;
}

 

 

代码与实例

程序运行截图如下:

源码如下:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

typedef vector<string> StringList;

StringList splitstr(string &str, char tag){

        StringList retVec;
        string subStr;

        for(size_t i = 0; i < str.length(); i++){

                if(tag == str[i]){

                        if(!subStr.empty()){

                                retVec.push_back(subStr);
                                subStr.clear();
                        }
                }
                else{

                        subStr.push_back(str[i]);
                }
        }

        if(!subStr.empty()){

                retVec.push_back(subStr);
        }

        return retVec;
}

int main(int argc, char *argv[]){


        FILE *fp;
        fp = popen("ps -ef | awk {'print $2,$8,$9,$10'}", "r");
        if(!fp){

                cout << "popen failed" << endl;
                return 0;
        }

        while(!feof(fp)){

                char buffer[1024];
                fgets(buffer, 1024, fp);
                string bufferStr = buffer;
                StringList list = splitstr(bufferStr, ' ');
                cout << "PID: " << list.at(0) << "  name: " << list.at(1) << endl;
        }

        return 0;
}
                                                     



 

 

版权声明:本文为qq78442761原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq78442761/article/details/103438464