ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2020-01-19 19:02:22  阅读:289  来源: 互联网

标签:返回 cmdstring shell 函数 exec 程序执行 Linux 返回值


本文转自 https://blog.csdn.net/qq_27664167/article/details/82194391

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

标签:返回,cmdstring,shell,函数,exec,程序执行,Linux,返回值
来源: https://www.cnblogs.com/clovershell/p/12215253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有