linux命令行与shell脚本编程大全 C程序中怎么调用Linux中的shell命令

时间:2024-02-21 09:41:32/人气:434 ℃

我们知道Linux中有很多系统函数,那么如果在程序中可能使用系统函数,那是十分方便的,比如我们需要将日期和时间写入到file文件中去,使用系统命令行函数可以这样:

因此在标准C语言中定义了system函数,它的操作依赖于操作系统,我们来看下它的调用形式:

int system (const char *__command);

该函数需要引入头文件stdlib.h

该函数是用fork,exec,waitpid这3个系统函数实现的,返回值想对比较复杂

1、 如果command为空指针,当系统实现了system函数时,返回非零指针,否则返回零,这是个用来测试系统的system函数是否有效的方法,在一般linux系统中,system都是有效的;

2、 如果command不空,就要根据fork,exec,waitpid这3个系统函数的执行情况确定返回值,若fork出错或waitpid中出现EINTR错误,system返回-1;

3、 如果exec错误返回,表示shell无法执行这个命令,返回值与shell执行exit(127)的返回值相同,

4、 否则,若3个系统函数调用都成功了,返回值shell的结束状态,与前面介绍的waitpid的返回值情况相同。

我们来看看几个语句的执行返回值:

下面呢我在网上找了下system函数的实现代码,帮助我们理解system函数:

我们来看下这个函数,命令sh的"-c"选项指出下一个命令行参数就是命令输入,而不是从标准输入或文件中读取,。sh命令自动对这个以空字符结尾的字符串进行分析,将它分解为独立的命令行参数的形式,并执行这个命令,这个命令可以包括I/O重定向,管道命令等。

在这里子进程退出时使用了_exit而不是exit,这是为了保证子进程的标准I/O流不被清掉。

下面我们来看一个具体点的例子:

我们来分析下这个程序,第一个system调用,执行命令"date",正确输出当前系统时间,而第二个system调用中,由于命令行为一个非法命令,系统无法执行,运行execl("/bin/sh","sh","-c",cmdstring,(char *)0);时错误返回,接着运行_exit(127)指令,输出错误信息sh: 1: nosuchcommand: not found,第三个system系统调用正确执行,返回值为shell的退出状态11264.

推荐

  • 1非洲所跨的经纬度范围175
  • 2简历中自我评价的格式范文196
  • 3别让你的泪打湿我的眼歌谱433
  • 4国家励志奖学金多少钱213
  • 5中学生禁烟手抄报漂亮图片137
  • 6时尚女魔头观后感锦集174
  • 7属虎和属蛇的婚姻怎么样283
  • 8一年级下册思品教学计划316
  • 9超简单的录屏方法:这两个录屏方法快收藏185
  • 10乾隆为什么要三年禅位?为何不担心会被嘉庆干掉118
  • 首页/电脑版/地图
    © 2024 OONiu.Com All Rights Reserved.