linux命令行与shell脚本编程大全 C程序中怎么调用Linux中的shell命令
我们知道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.
- 05-06有史以来猫科动物排行 你不知道的猫科动物它们的起源
- 01-13解析红马,龙头马,是谁
- 11-11伪装者王天风死时为何掐住明台:伪装者,实在是不懂为何王天风的死间计划一定要扯上明台呢
- 01-2910部最好看的爱情电影:推荐10部不一样的,爱情电影
- 05-09使命召唤18出现安全模式后闪退:COD20使命召唤20服务器闪退服务器连接不稳定的解决方法
- 01-14梦见小龙虾跑了一地:梦见漫山遍野小龙虾要解救
- 10-28公制螺纹车削参数:技术螺纹车削技术解析
- 12-26人的身高越高寿命就越短吗?身高决定寿命长短,个子高
- 12-13愿做菩萨那朵莲好听的佛歌大全:最美佛歌来生愿做一朵莲
- 12-25描写童真童趣的古诗十篇:关于童真童趣的古诗词
- 04-03左倒库打早打晚修正视频最笨方法,神奇的,一指倒库法
- 05-17十万块钱的家用轿车怎么选?假如给你十万元怎么选家用车
- 03-07邯郸周边适合带孩子爬山地方 邯郸这里周末带孩子登山看日出不累还带劲
- 12-15你有钱你想干什么?你很有钱你来这儿看看
- 12-28cad围墙图纸教程,景观小品特色围墙栏杆CAD施工图100张合集
- 04-14深圳羊台山爬山好去处 周末又多了一个好去处
热门
推荐
- 1大学生的自主创业心得体会378
- 2健康教育教学个人工作总结范文112
- 3顶岗的实习月总结249
- 4美丽的东湖山公园作文267
- 5亥时是几点十二地支分别指几点460
- 6教研室上半年工作总结及下半年的工作计划教研室上半年工作总结及下半年的工作计划371
- 7人工流产手术最佳时间315
- 8羊角大椒干购销合同188