- 浏览: 61122 次
- 性别:
- 来自: 武汉
int get_system_info(char* cmdstring, char* buf, int len)
//----------------------------------------------------------------------------------
// 增强的system函数,能够返回system调用的输出
// 增强的system函数,能够返回system调用的输出 *
// @param[in] cmdstring 调用外部程序或脚本的命令串
// @param[out] buf 返回外部命令的结果的缓冲区
// @param[in] len 缓冲区buf的长度 *
// @return 0: 成功; -1: 失败
{
int fd[2];
pid_t pid;
int n, count;
memset(buf, 0, len);
if (pipe(fd) < 0)
{
return -1;
}
if ((pid = fork()) < 0)
{
return -1;
}
else if (pid > 0) /* parent process */
{
close(fd[1]); /* close write end */
count = 0;
while ((n = read(fd[0], buf + count, len)) > 0 && count > len)
{
count += n;
}
close(fd[0]);
if (waitpid(pid, NULL, 0) > 0)
{
return -1;
}
}
else /* child process */
{
close(fd[0]); /* close read end */
if (fd[1] != STDOUT_FILENO)
{
if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
{
return -1;
}
close(fd[1]);
}
if (execl("/bin/sh", "sh", "-c", cmdstring, (char*)0) == -1)
{
return -1;
}
}
return 0;
}
//----------------------------------------------------------------------------------
// 增强的system函数,能够返回system调用的输出
// 增强的system函数,能够返回system调用的输出 *
// @param[in] cmdstring 调用外部程序或脚本的命令串
// @param[out] buf 返回外部命令的结果的缓冲区
// @param[in] len 缓冲区buf的长度 *
// @return 0: 成功; -1: 失败
{
int fd[2];
pid_t pid;
int n, count;
memset(buf, 0, len);
if (pipe(fd) < 0)
{
return -1;
}
if ((pid = fork()) < 0)
{
return -1;
}
else if (pid > 0) /* parent process */
{
close(fd[1]); /* close write end */
count = 0;
while ((n = read(fd[0], buf + count, len)) > 0 && count > len)
{
count += n;
}
close(fd[0]);
if (waitpid(pid, NULL, 0) > 0)
{
return -1;
}
}
else /* child process */
{
close(fd[0]); /* close read end */
if (fd[1] != STDOUT_FILENO)
{
if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
{
return -1;
}
close(fd[1]);
}
if (execl("/bin/sh", "sh", "-c", cmdstring, (char*)0) == -1)
{
return -1;
}
}
return 0;
}
发表评论
-
C++内存管理
2011-09-19 10:45 7711 内存管理 伟大的Bill G ... -
调试程序
2011-09-14 16:21 694******************************* ... -
有用的网址
2011-08-04 12:44 600http://searchdns.netcraft.com/ -
vim高级应用
2011-08-04 10:29 981命令模式: “s”为表 ... -
c/c++ 调试
2011-06-08 15:31 809readelf -s a.out 可以查看符号表,就能找到对应 ... -
网站列表
2011-02-25 09:48 660http://www.rosoo.net/ NO ... -
高性能服务器注意事项
2011-01-18 13:09 813对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或 ... -
在 Linux 平台中调试 C/C++ 内存泄漏方法
2010-10-20 15:56 890由于 C 和 C++ 程序中完全由程序员自主申请和释放内存 ... -
用socket编写C/S结构程序的流程图
2010-10-08 17:07 24361.面向连接的套接字的系统调用时序图 无连接协议的套接字调用 ... -
将文件读入内存
2010-09-14 17:35 1083将文本文件读入内存。需要用到fseek、fread和ftell ... -
STL中的容器的遍历的使用方法
2010-08-12 17:39 2048STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器 ... -
50 c/c++ 源码网站
2010-08-03 15:47 7661、http://snippets.dzone.com/tag ... -
值得注意的函数
2010-08-03 13:48 529函数 严重性 解决 ... -
结构体对齐
2010-07-30 13:59 12941,比如: struct{ short a1; sh ... -
LINUX c++线程池框架
2010-07-15 11:25 1383本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进 ... -
一个简单的linux线程池
2010-07-12 18:10 951线程池:简单地说,线程池 就是预先创建好一批线程,方便、快速 ... -
文件字符串处理
2010-06-30 09:12 675#include <iostream> #incl ... -
不能用类成员函数作为线程函数
2010-06-29 17:12 828不能用类成员函数作为线程函数 -
c++ 字符串替换
2010-06-24 10:43 954#include <string> #incl ...
相关推荐
JAVA最好的调用外部命令的类。实际运用下来,比较强壮。
调用外部命令.rar 调用外部命令.rar 调用外部命令.rar 调用外部命令.rar 调用外部命令.rar 调用外部命令.rar
调用外部命令模块是易语言的一个很实用的模块。
python 调用系统命令【python如何调用系统命令】.docx
完整版调用外部命令.rar
java 系统命令调用!
易语言源码调用外部命令.7z
调用外部命令.zip易语言程序源码资源下载调用外部命令.zip易语言程序源码资源下载 1.适合学生做毕业设计用 2.适合程序员学习研究用 3.适合新手自学研究使用
前言 利用Python调用外部系统命令的方法可以提高编码效率。...某些场景调用外部命令就是为获取输出结果,也可以通过输出结果来判断命令执行成功还是失败。分析结果如下: 下面再针对每一个函数使用
Python怎么调用系统命令
Python调用系统命令的6种方法
国嵌linux培训的系统调用命令大全,包含所有的系统调用命令。不错的资源
本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况。 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 复制代码 代码如下: top -bi > cpuHistory.log 或 复制代码 代码...
自己做的java调用ping命令实例 地址使用的是套接字地址 ping的主机用sping注入
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
基于winform窗体程序开发。能方便的调用系统所有命令
易语言调用系统自带的“运行命令”源码,调用系统自带的“运行命令”,打开运行
java调用执行系统命令的工作类。包括在Linux和windows系统,已经系统错误输出流的监控。
java调用linux系统命令的封装工具类。