• [转载]Linux下C程序执行shell命令并获取返回结果的方法


    Linux下的C编程有以下几种方法可以执行shell命令

    1. system()函数
    2. exec函数簇
    3. popen()函数

    如果还需要获取返回结果,有两种较简单方便的方法

    1. popen()函数
    2. 匿名管道

    1.system()函数

    所需头文件:#include<stdlib.h>

    函数原型:int system(const char *cmdstring);

                      cmdstring是一个字符指针,就是一个包含需要运行的shell命令的字符串

    返回值:

    如果cmdstring字符指针为NULL,返回1
    如果fork失败或者waitpid返回除EINTR之外的错,则返回-1
    如果exec失败,即不能执行shell(多半是没这个命令),返回值如同shell执行了exit(127)一样,结果为32512
    如果fork、exec、waitpid都没有问题,shell也有这个命令,那么返回值是shell的终止状态(即执行shell命令的返回值)

    2.exec函数簇

    调用exec函数时,该调用ecec的进程执行的程序完全替换为新程序,但并不创建新进程,前后进程的ID并不改变。exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段。

    3.popen()函数和pclose()函数

    常见操作是创建一个连接到另一个进程(shell的命令行)的管道,然后读其输出或向其输入端发送数据。

    工作原理:popen先执行fork,然后调用exec执行cmdstring,并返回一个标准的I/O文件指针。

    头文件:#include<stdio.h>

    原型:FILE *popen(const char *cmdstring, const char *type)

    cmdstring:包含shell命令字符串

    type:为”r”时,则文件指针连接到cmdstring的标准输出,也就是代表指向执行shell命令返回的消息,也可以认为链接到stdout

               为”w”时,则文件指针连接到cmdstring的标准输入,也可以认为链接到stdin

                int pclose(FILE *fp);

                          fp:为ponen返回的文件指针

    返回值:成功返回cmdstring的终止状态;出错返回

    4.匿名管道pipe

    使用管道来获取执行shell命令返回的信息,一般流程如下

            1.创建管道

            2.使用dup函数复制描述符将shell命令行标准输出绑定到管道的写端

            3.从管道的读端读取数据

    pipe函数

            所需头文件:#include<unistd.h>

            函数原型:int pipe(int fd[2]);

            返回值:成功返回0,出错返回-1

  • 相关阅读:
    visio 改变画布大小
    Delphi 让自己的软件实现双击打开文件 转
    气相色谱里面的斜率灵敏度什么意思
    色谱峰的类型BB,BV,VB等都是什么意思
    Delphi的windows剪切板操作函数
    上传图片,多图上传,预览功能,js原生无依赖
    前端性能监控:window.performance
    ES6新属性笔记
    :jQuery实例【DEMO】
    自定义checkbox/radio
  • 原文地址:https://www.cnblogs.com/clovershell/p/12215253.html
Copyright © 2020-2023  润新知