`
unsoundboy
  • 浏览: 61122 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

调用系统命令

    博客分类:
  • c++
阅读更多
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;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics