Linux中用C++通过管道来获取命令行输出的内容
2013-05-27 17:27
585 查看
Linux中用C++通过管道来获取命令行输出的内容
转载请说明出处:/article/7618622.html
使用C++时,有些时候我们可以通过管道的方法来获取所执行的命令所输出的内容。具体做法如下:
首先你需要确定你所执行的命令所输出的内容的格式(不同的操作系统相同的命令所输出来的内容格式可能会不一致)。我们来举例说明:我想获取/var目录当前所暂用的存储空间,以KB为单位输出:
[root@localhost /]# du -sk /var
13532132 var
[root@localhost /]# du -sk /var | awk -F ' ' '{print $1}'
13532132
从上面输出可以知道/var目录当前暂用了13532132KB,那么我们如何将改值使用到我们的程序中呢?为了简单起见我实现了如下函数:
转载请说明出处:/article/7618622.html
使用C++时,有些时候我们可以通过管道的方法来获取所执行的命令所输出的内容。具体做法如下:
首先你需要确定你所执行的命令所输出的内容的格式(不同的操作系统相同的命令所输出来的内容格式可能会不一致)。我们来举例说明:我想获取/var目录当前所暂用的存储空间,以KB为单位输出:
[root@localhost /]# du -sk /var
13532132 var
[root@localhost /]# du -sk /var | awk -F ' ' '{print $1}'
13532132
从上面输出可以知道/var目录当前暂用了13532132KB,那么我们如何将改值使用到我们的程序中呢?为了简单起见我实现了如下函数:
int64_t CalculateDirUsedCapacity (const std::string& directoryName) { FILE *fstream = NULL; char buff[32]; memset (buff ,'\0', sizeof(buff)); std::string cmd = "du -sk " + directoryName; cmd += "| awk -F ' ' '{print $1}'"; // 通过管道来回去系统命令返回的值 if(NULL == (fstream = popen (cmd.c_str (), "r"))) { return 0; } if(NULL == fgets (buff, sizeof(buff), fstream)) { pclose(fstream); return 0; } std::strstream ss; ss << buff; int64_t usedCapacity = 0; ss >> usedCapacity; pclose(fstream); // close pipe return usedCapacity; }
相关文章推荐
- [置顶] Linux中用C++通过管道来获取命令行输出的内容
- 【c/c++】如何调用【linux】shell命令行命令并获取命令行的输出内容
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程
- 急救!CreateProcess后,通过管道获取命令行输出不完整
- 【c/c++】如何调用【Window】cmd命令行命令并获取命令行的输出内容
- linux C++通过ntp协议获取网络时间
- linux grep通过管道输出到head出现write error: Broken pipe错误
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
- linux下通过命令行获取gmail的新邮件
- C#获取命令行输出内容的方法简介
- C++ Demo 001: 读取一个从命令行指定的文件,输出文件内容到显示器,并且给每一行输出添加一个行号
- VC调用CMD命令通过控制台管道获取输出结果
- linux通过C/C++获取本地时间的方法
- Linux鲜为人知的安全漏洞:不要将输出内容管道给你的shell
- C#获取命令行输出内容的方法
- python使用管道获取其它进程的输出内容
- C#获取命令行输出内容的方法
- 通过管道获取cmd输出
- linux C++ 获取当前时间,以标准时间“年-月-日 时:分:秒”的形式输出,且秒后边跟小数精确到毫秒
- c++与Tcl通过管道通信,并传递参数,获取测试仪实时测试进度