Linux下C语言执行系统指令,获取返回码、标准输出及标准错误

Linux下C语言执行系统指令,获取返回码、标准输出及标准错误,第1张

概述

Linux下,想在C语言中执行命令,大概有三种方法:system、popen、exec。

  • system:使用简单,但是只能获取到返回码,不能拿到标准输出和标准错误;
  • popen:只能拿标准输出,不能拿到返回码和标准错误(其实可以通过指令重定向的方式将标准错误重定向到标准输出,但是这样做没法判断哪些信息是标准输出,哪此是信息是标准错误)。
  • exec:这是一组函数,可以加载一个外部程序到本进程,相当于将外部程序嵌入到本进程中,调用exec函数成功之后,exec后面的代码将不会再被执行。
思路
  1. 使用fork函数,创建一个子进程;
  2. 在子进程中调用dup2函数将标准输出和标准错重定向到管道;
  3. 在子进程中调用exec函数加载指令进程
  4. 在主进程在通过管道接收标准错误和标准输出,通过wait获取命令进程退出码。

主要代码如下:

int fd_out[2];
int fd_err[2];
pipe(fd_out);
pipe(fd_err);
pid_t pid = fork();
if (pid == 0) {
    close(fd_out[0]);
    close(fd_err[0]);
    dup2(fd_out[1], STDOUT_FILENO);
    dup2(fd_err[1], STDERR_FILENO);
    execvp(args[0], args);
    // execvp调用失败,直接返回-1
    perror("execvp失败");
    return -1;
} else if (pid > 0) {
    close(fd_out[1]);
    close(fd_err[1]);
    char buffer[1024] = {0};
    // 读取标准输出信息
    while(true) {
        int len = read(fd_out[0], buffer, sizeof(buffer));
    }
    // 读取标准错误信息
    while(true) {
        int len = read(fd_err[0], buffer, sizeof(buffer));
    }
        close(fd_err[0]);
        close(fd_out[0]);
        int status = 0;
        // 获取进程退出码
        wait(&status);
    }
源码

码云:cmd-runner
github: cmd-runner

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1499152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

随机推荐

  • Virgin VIE是哪个国家的品牌?

    【导读】:唯Virgin VIE英国本土最大的直销护肤品牌Virgin Vie创立于1997年,作为英国本土最大的直销护肤品品牌,其高质量的产品和优良的品牌传统及品牌态度,广...Virgin VIE

    2022-08-18
    0 0 0
  • 童欣家居是哪个国家的品牌?

    【导读】:童欣家居童欣家居品牌隶属于上海童心电子商务有限公司,该公司于2008年成立,是一家集研发、设计、生产、销售于一体的综合型家纺龙头企业,产品现已涉...童欣家居是中国品牌。童欣家居童欣家居品牌

  • 金正是哪个国家的品牌?

    【导读】:广东金正电器(集团)公司是一家集科研、生产、贸易、投资为一体的现代高科技企业,始创于1997年4月2日。 金正“真金不怕火炼”的产品品质和企业精神为...金正是中国品牌。广东金正电器(集团)

  • 富奥斯是哪个国家的品牌?

    【导读】:富奥斯佛山市富奥斯门业制造有限公司,铝合金门窗十大品牌,中国优秀绿色环保品牌,中国高端铝门窗行业创新者,获有国家多项新型实用专利和外观专利,...富奥斯是中国品牌。富奥斯佛山市富奥斯门业制造

    2022-08-18
    0 0 0
  • 伟星是哪个国家的品牌?

    【导读】:伟星股份是面向全球的中国服装辅料领军企业,是中国纽扣和拉链行业首家上市公司(证券代码002003)、中国纽扣、拉链标准的主要起草单位。工地凭借在纽...伟星是中国品牌。伟星股份是面向全球的中

    2022-08-18
    0 0 0
  • 婷美是哪个国家的品牌?

    【导读】:广州市娇兰化妆品有限公司,成立于1999年,旗下拥有众多知名品牌,包括婷美、军献、纱曼婷、敏婷、雪颜素、小家伙等。婷美是中国品牌。广州市娇兰化妆品有限公司,成立于1999年,旗下拥有众多知名

    2022-08-18
    0 0 0
  • 千细是哪个国家的品牌?

    【导读】:1999年,Change she 率先登陆中国,世纪新宠暗示时代流变。2007年,千细传奇已经成为了时尚生活哲学的代名词深入江南大地,虏获了时尚青年们的芳心。短...千细是中国品牌。1999

    2022-08-18
    0 0 0
  • 衣礼服人是哪个国家的品牌?

    【导读】:衣礼服人衣礼服人品牌成立于2011年6月28日,隶属于苏州美依特服饰有限公司,苏州美依特服饰有限公司地址位于苏州,苏州美依特服饰有限公司是一家集设计...衣礼服人是中国品牌。衣礼服人衣礼服人

    2022-08-18
    0 0 0
  • 浪潮是哪个国家的品牌?

    【导读】:保定白沟天尚行箱包皮具有限公司坐落于驰名中外的中国箱包之都—白沟,地理位置优越,距北京95公里,天津110公里,水陆交通便利,是集开发、设计、生产...浪潮是中国品牌。保定白沟天尚行箱包皮具

    2022-08-18
    0 0 0

发表评论

登录后才能评论

评论列表(0条)

保存