- 浏览: 63405 次
- 性别:
- 来自: 武汉
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 8141 内存管理 伟大的Bill G ... -
调试程序
2011-09-14 16:21 741******************************* ... -
有用的网址
2011-08-04 12:44 632http://searchdns.netcraft.com/ -
vim高级应用
2011-08-04 10:29 1011命令模式: “s”为表 ... -
c/c++ 调试
2011-06-08 15:31 843readelf -s a.out 可以查看符号表,就能找到对应 ... -
网站列表
2011-02-25 09:48 699http://www.rosoo.net/ NO ... -
高性能服务器注意事项
2011-01-18 13:09 843对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或 ... -
在 Linux 平台中调试 C/C++ 内存泄漏方法
2010-10-20 15:56 922由于 C 和 C++ 程序中完全由程序员自主申请和释放内存 ... -
用socket编写C/S结构程序的流程图
2010-10-08 17:07 24671.面向连接的套接字的系统调用时序图 无连接协议的套接字调用 ... -
将文件读入内存
2010-09-14 17:35 1114将文本文件读入内存。需要用到fseek、fread和ftell ... -
STL中的容器的遍历的使用方法
2010-08-12 17:39 2090STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器 ... -
50 c/c++ 源码网站
2010-08-03 15:47 7961、http://snippets.dzone.com/tag ... -
值得注意的函数
2010-08-03 13:48 559函数 严重性 解决 ... -
结构体对齐
2010-07-30 13:59 13281,比如: struct{ short a1; sh ... -
LINUX c++线程池框架
2010-07-15 11:25 1422本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进 ... -
一个简单的linux线程池
2010-07-12 18:10 983线程池:简单地说,线程池 就是预先创建好一批线程,方便、快速 ... -
文件字符串处理
2010-06-30 09:12 707#include <iostream> #incl ... -
不能用类成员函数作为线程函数
2010-06-29 17:12 869不能用类成员函数作为线程函数 -
c++ 字符串替换
2010-06-24 10:43 997#include <string> #incl ...
相关推荐
在编程和系统管理中,调用外部命令是一个常见的操作,特别是在需要执行操作系统级别的任务或集成不同应用程序时。这个“调用外部命令.rar”文件可能包含了关于如何在不同环境中执行这一操作的相关资料。以下是对这个...
JAVA最好的调用外部命令的类。实际运用下来,比较强壮。
在IT领域,调用外部命令是一项基础且重要的技能,尤其对于开发者来说,它涉及到系统交互、脚本编程以及自动化任务的执行。这个“完整版调用外部命令.rar”压缩包很可能包含了一系列关于如何在不同操作系统环境下调用...
在"调用外部命令.zip"这个资源中,包含的是易语言程序源码,用于演示如何在易语言中调用操作系统外部的命令或程序。 在易语言中,调用外部命令通常涉及到以下几个核心知识点: 1. **命令行接口**:操作系统提供的...
"易语言源码调用外部命令"的主题涉及到的是如何在易语言程序中调用操作系统提供的外部命令或程序,以实现更复杂的功能或者与系统进行交互。 首先,我们要理解什么是外部命令。外部命令通常指的是操作系统中不在程序...
`commands`模块提供了一个简单的接口来执行外部命令并获取其输出和状态。但是请注意,该模块已被弃用,不推荐在新项目中使用。 #### 五、注意事项 1. **编码问题**:如果命令的输出或参数包含中文字符,使用`os....
本文将详细介绍如何使用Java Runtime类中的`getRuntime().exec()`方法来调用系统命令,并提供一些实际应用场景的例子。 ### Java Runtime.getRuntime().exec() `java.lang.Runtime`类提供了运行时系统的表示形式,...
Java可以通过`Runtime.getRuntime().exec()`方法来执行外部命令,这与Perl的`system()`类似。 2. `test.pl`: 这是一个Perl脚本,很可能是用来演示如何调用系统命令和处理输出的实例。 在实际应用中,Perl脚本可能与...
调用外部命令模块是易语言的一个很实用的模块。
总之,通过使用System.Diagnostics.Process类,WinForm应用程序能够轻松地与操作系统进行交互,调用各种系统命令。这极大地增强了应用程序的功能,但也需要开发者对潜在的安全问题保持警惕。理解并熟练应用这些知识...
在QT5中,我们可以通过QProcess类来调用外部的系统命令,比如DOS命令,实现与操作系统进行交互。这个小例子展示了如何在QT5环境中使用QProcess来执行像`ipconfig`和`ping`这样的命令,不仅限于Windows,也适用于...
总结,Java调用系统命令“ping”涉及到对操作系统接口的使用,以及对输入/输出流的处理。在Spring框架下,我们可以通过依赖注入简化代码并提高可维护性。实践过程中需要注意处理可能的异常,并确保正确关闭所有打开...
在易语言中,有时我们需要调用操作系统的一些功能,例如与Windows命令行(CMD)交互,这时就需要使用到"控制台调用CMD命令"的技术。 控制台调用CMD命令主要涉及到进程管理和系统调用。在易语言中,我们可以使用内置...
在Python开发中,有时候我们需要让Python脚本去调用操作系统级别的命令,例如执行一个外部程序、查询系统信息或者进行文件管理等操作。Python提供了多种方式来实现这一目标,本文将详细介绍这些方法,并通过实例帮助...
这可以通过多种方式实现,本文将详细介绍6种常见的Python调用系统命令的方法。 1. **os.system()** `os.system()` 是一个简单的调用系统命令的方法,它会在当前进程中创建一个子进程来执行命令。如果命令执行成功...
由于调用系统命令可能带来安全风险,比如执行恶意代码,因此在使用时应遵循以下最佳实践: 1. **验证输入**:确保用户提供的任何命令都经过严格的过滤和验证,避免注入攻击。 2. **限制权限**:尽可能使用无权限的...
具体到“运行命令”,在易语言中,我们通常会使用`系统命令`这个子程序。它的语法如下: ```易语言 .系统命令(字符串型 参数) ``` 这里的参数就是我们要传递给“运行命令”的字符串,例如,如果我们想打开一个...
在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...
前言 利用Python调用外部系统命令的方法可以提高编码效率。...某些场景调用外部命令就是为获取输出结果,也可以通过输出结果来判断命令执行成功还是失败。分析结果如下: 下面再针对每一个函数使用