首页 > 系统服务 > 详细

linux C中调用shell命令

时间:2016-03-10 20:24:27      阅读:222      评论:0      收藏:0      [点我收藏+]

1.system

  system只是执行shell命令,返回int型的执行结果

  int system(const char * string);

  system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略

  而system函数对返回值的处理,涉及3个阶段:

  阶段1:创建子进程等准备工作。如果失败,返回-1。
  阶段2:调用/bin/sh拉起shell脚本,如果拉起失败或者shell未正常执行结束(参见备注1),原因值被写入到status的低8~15比特位中。system的man中只说明了会写了127这个值,但实测发现还会写126等值。
  阶段3:如果shell脚本正常执行结束,将shell返回值填到status的低8~15比特位中。
  另外,如果想得到shell命令返回的值,则可以调用WEXITSTATUS(status)
  弄明白了上述内容,我们就会对system()函数执行后返回什么有比较清楚的认识了。

 

#include<stdlib.h>

 

int main()

 

{

 

  int status = system(“ls -l /etc/passwd”);

  return 0;

 

}

 

2.popen

  popen则可以利用管道获取shell命令输出的结果,返回一个FILE型的指针

  FILE * popen( const char * command,const char * type);

  popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。

#include<stdio.h>
int main()
{
   
FILE * fp;
    charbuffer[80];
    fp=popen("cat /etc/passwd","r");
    fgets(buffer,sizeof(buffer),fp);
    printf(“%s”,buffer);
    pclose(fp);

  return 0;
}

linux C中调用shell命令

原文:http://www.cnblogs.com/zjdbupt/p/5263065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!