C语言获取Shell返回结果

  Linux编程时候,如果我们需要调用shell命令或脚本通常使用system方法。如system("ls")

  该方法返回值为0或-1,即成功或失败。而有的时候我们想要获取shell命令执行的结果,该怎么办呢?

  我们可以将shell命令结果重定向到文件中,然后再读取这个文件,如:

    system("ls>result.txt")

    FILE *fp = fopen(result, "r")

  当然我们也可以直接使用管道,如下面示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <string.h>

char* shellcmd(char* cmd, char* buff, int size)
{
    char temp[256];
    FILE* fp = NULL;
    int offset = 0;
    int len;

    fp = popen(cmd, "r");
    if(fp == NULL)
    {
        return NULL;
    }

    while(fgets(temp, sizeof(temp), fp) != NULL)
    {
        len = strlen(temp);
        if(offset + len < size)
        {
            strcpy(buff+offset, temp);
            offset += len;
        }
        else
        {
            buff[offset] = 0;
            break;
        }
    }

    if(fp != NULL)
    {
        pclose(fp);
    }

    return buff;
}

int main(void)
{
    char buff[1024];

    memset(buff, 0, sizeof(buff));
    printf("%s", shellcmd("ls", buff, sizeof(buff)));

    return 0;
}

  

  注意:C语言调用shell命令是新建一个进程执行的,执行速度很慢,最好不要C、Shell混合编程。

时间: 2024-07-29 11:50:01

C语言获取Shell返回结果的相关文章

java调用shell获取返回值

转自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839 1.shell文件return.sh echo 1 echo 2 echo 3 2.java文件Test.java [java] view plain copy import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStreamReader

[转]system函数返回值探究

对于system这个函数的功能早就有一定了解,读书期间,就学习了UNIX系统编程这本书,后来买了APUE.我这个人总是有好读书不求甚解的毛病.对于system函数只知其一,不知其二.后来被人问起相关的问题,结果丢了脸.书到用时方恨自己不求甚解.今天仔细探查了下system的一些特性. APUE这本书,对system这个函数已经将的比较明白了,只是它的相关知识稍显分散.最开始我是去网上找的资料,自己写的测试代码,可是还是有很多迷惑的地方.后来才拿起APUE ,好好读了第八章和第十章的相关章节. #

[Shell&amp;Mac&amp;Environment variables]自己常用的Mac(或者说Linux)Shell命令小结,含Mac使用zsh shell的环境变量的有关配置方法

今天在使用tomcat的配置的时候,我用的mac,要是用到一些命令去配置tomcat. 问题来了: 我每次要去启动tomcat服务特别麻烦,因为我要先进入tomcat所在的文件目录,或者不进入使用~/,但是因为我把tomcat放到了一个比较“深“的文件夹里,所以命令显得又丑又长. 问题解决方案: 1.使用环境变量(修改.bashrc的方法) a.先查看自己的Mac目前正在用的是什么shell echo $SHELL 返回结果类似如下图 这里我是zsh,,也许你是bash,不过没关系,配置环境变量

【转】Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency> 代码: package com.spring.bean.annotation; import java.io.BufferedReader; import

shell 命令集

shell 常用知识点--------------------------------------- sed 用法 http://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0.只有当命令存在语法错误时,sed的退出状态才不是0. sed命

Python 执行Shell 外部命令

1.os.system()此方法执行的外部程序,会将结果直接输出到标准输出.os.system的返回结果为执行shell 的 $? 值.因此请执行没有输出结果的程序时适合使用此方法.如touch .rm 一个文件等. In [1]: import os In [2]: os.system('touch test.txt') Out[2]: 0 In [3]: os.system('rm -rf test.txt') Out[3]: 0 2.os.popen()此方法结合了os.system和 文

Linux shell之ABS--特殊字符

特殊字符如下: “#”     --注释,行首以#开头为注释(#!是个例外).“;”     --命令分隔符,可以用来在一行中来写多个命令.“;;”    --终止"case"选项.“.”     --“.”命令等价于 source 命令这是一个 bash 的内建命令.“.”如果作为文件名的前缀的话,那么这个文件将成为隐藏文件 “.”字符匹配,这是作为正则表达是的一部分,用来匹配任何的单个字符.“"”     --部分引用."STRING"阻止了一部分特殊

Linux system函数返回值

例: [cpp] view plain copy status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值 (2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值. 2.如何正确判断test.sh是否正确执行? 仅判断status是否==0?或者仅判断status是否!=-1? 都错! 3.

Unix Shell 介绍

Unix Shell 介绍 http://www.kerneltravel.net/newbie/bsh_intro.htm Unix Shell 介绍 S. R. Bourne Bell 实验室 Murray Hill, New Jersey 07974 翻译:寒蝉退士 译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务. 原文:http://cm.bell-labs.com/7thEdMan/shell.bun 摘要 shell 是提供到 UNIX 操作系统的