linux c编程调用命令获取结果,[转载]Linux下C程序执行shell命令并获取返回结果的方法...

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

system()函数

exec函数簇

popen()函数

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

popen()函数

匿名管道

1.system()函数

所需头文件:#include

函数原型: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

原型: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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值