C++|Linux工作笔记-C++获取Linux中shell命令结果
发布日期:2021-06-30 10:40:57 浏览次数:2 分类:技术文章

本文共 2195 字,大约阅读时间需要 7 分钟。

目录

 

 


 

基本概念

这里首先介绍一条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
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 
#include
#include
#include
using namespace std;typedef vector
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;}

 

 

转载地址:https://it1995.blog.csdn.net/article/details/103438464 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:OllyDbg笔记-寄存器以及各种关键指令解析(含简单程序破解)
下一篇:OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月19日 05时11分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章