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

388 篇文章 20 订阅
140 篇文章 11 订阅

目录

 

 

基本概念

代码与实例


 

基本概念

这里首先介绍一条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;
}
                                                     



 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值