让你提前认识软件开发(23):怎样在C语言中运行shell命令?
第1部分 又一次认识C语言
怎样在C语言中运行shell命令?
【文章摘要】
Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上,同一时候shell操作在Linux的编程中占有非常重要的地位,这就须要开发者熟练掌握在C语言中运行shell命令的相关操作。
本文用实际的代码演示了怎样在C语言程序中运行shell命令,为相关软件开发工作的开展提供了參考。
【关键词】
Linux C语言 shell 命令 开发
一、程序运行流程
本文在Linux下运行一个简单的文件删除操作,C程序用makefile文件进行编译。程序运行流程如图1所看到的。
图1 程序运行流程
文件删除是否成功,能够通过查看相应文件夹下的文件是否存在来推断。
二、文件夹结构
本文的C程序文件为TestShellCommand.c,编译生成的文件存放到release文件夹下。同一时候,在release文件夹下有一个TestFile文件夹,存放待删除的文件。文件夹结构如图2所看到的。
图2 文件夹结构
三、C程序代码
本文中要用到的C程序代码例如以下:
/**********************************************************************
*
:// 改动历史记录, 包括改动日期、版本号号、改动人及改动内容
}
对于该程序,说明例如以下:
(1) 本程序利用“rm-rf …”命令来删除文件,该命令不仅能够删除文件,也能够删除非空文件夹(-rf參数表示递归强制删除)。当然,这里也能够直接用“rm …”命令来删除文件。“rm -rf %s/%s.*”中的“*”表示匹配全部的字符,即仅仅要文件索引与输入的一致,无论后缀是什么,都会被删除掉。
(2) 本程序利用“system”函数来运行删除文件的shell命令,该函数的原型为“int system(const char * string);”。“system”函数运行完毕之后会返回一些整型值,表示成功或失败。程序中用检查errno的方法来确认运行是否成功,如程序中errno为0和10表示运行成功。此外,要注意包括头文件<errno.h>。
(3) 本程序用strrchr函数查找输入的文件索引里面是否包括了“.”,即推断是否输入了文件的后缀,依据有无后缀来设置不同的删除命令。
四、makefile文件内容
本程序所用的makefile文件的内容例如以下:
TestShellCommand : TestShellCommand.c
The delete command is: rm -rf TestFile/123456.*
zhou@linux:~/zhouzx/TestShellCommand/release> ./TestShellCommand
Input the index of source file: 123456.r
The delete command is: rm -rf TestFile/123456.r
上面运行了四次TestShellCommand,123456.r文件都被成功删除掉了。为了验证程序的正确性,能够多用一些文件来进行測试。
六、总结
本文对C语言程序中运行shell命令的方法作了具体的介绍,并用实际的程序代码来演示了其运行结果。
在C语言程序运行shell命令的过程中,我们要注意下面问题:
(1) 一定要将shell命令配置正确,并在其运行前后打印具体的日志,方便对程序进行调试和查错。
(2) 在进行删除操作的之前,还要细致检查shell命令的正确性,确保程序不会误删除。
在实际的软件开发项目中,C语言程序运行于Linux之下已是十分常见。本文介绍了C语言程序中运行shell命令的过程,为相关软件开发工作的顺利开展提供了故意的參考。
(欢迎訪问南邮BBS:http://bbs.njupt.edu.cn/)
(欢迎訪问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)
(本系列文章每周更新两篇,敬请期待!本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)
让你提前认识软件开发(23):怎样在C语言中运行shell命令?的更多相关文章
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...
- 让你提前认识软件开发(21):C程序中的定时器
版权声明:本文为博主原创文章.对文章内容有不论什么意见或建议.欢迎与作者单独交流.作者QQ(微信):245924426. https://blog.csdn.net/zhouzxi/article/d ...
- 让你提前认识软件开发(17):makefile文件的书写及应用
第1部分 又一次认识C语言 makefile文件的书写及应用 [文章摘要] makefile用于Linux下整个project的编译.对于Linux下的C/C++语言的编译是至关重要的. 本文以实际的 ...
- 让你提前认识软件开发(31):数据库脚本中的begin与end
版权声明:本文为博主原创文章.对文章内容有不论什么意见或建议,欢迎与作者单独交流.作者QQ(微信):245924426. https://blog.csdn.net/zhouzxi/article/d ...
- 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?
第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤: 第一步,阅读需求.弄清楚自己要完毕什么功能. ...
- Linux软件开发常用的软件包(持续更新中)
下面是Linux开发常用的软件包: 软件包的名称 作用描述 安装方式 build-essential sudo apt-get install build-essential policycore ...
- 我的Java开发学习之旅------>Java语言中方法的参数传递机制
实参:如果声明方法时包含来了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时传给形参的参数值也被称为实参. Java的实参值是如何传入方法?这是由Java方法的参数传递机制来控制的,Java ...
- 敏捷软件开发 VS. 传统软件工程
敏捷软件开发 VS. 传统软件工程 软件工程这一术语1968年被提出,之后美国软件工程专家巴利·玻姆对十多年间研究软件工程的专家学者们提出的一些准则与信条,于1983年对提出软件工程的七条基本定理,将 ...
- 敏捷软件开发 Agile software Development(转)
原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...
随机推荐
- 一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。
前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法. 今天有空写了一下.代码如下,注释比较详细: using System; usi ...
- JAVA JNI
jni非常好的一篇文章 http://m.blog.csdn.net/article/details?id=22827307 JAVA JNI介绍 http://blog.csdn.net/cyg08 ...
- CHARINDEX (Transact-SQL)
SQL Server 2014 其他版本 2(共 3)对本文的评价是有帮助 - 评价此主题 在一个表达式中搜索另一个表达式并返回其起始位置(如果找到). Transact-SQL 语法约定 语法 ...
- qt获取本机网络信息
networkinformation.h #include<QtGui/QWidget> #include<QLabel> #include<QPushButton> ...
- centos7命令行与图形界面启动模式修改
1.命令启动 systemctl set-default multi-user.target 2.图形界面模式 systemctl set-default graphical.target
- javascript模式——Decorator
Decorator 模式是一种结构型模式,他意在促进代码的复用,是塑造子类的一个方式. 这种想法是基于,新增的属性,对于对象来说不是必须的基本功能.我们为特殊的对象添加自己的方法,而不是重新创建一个类 ...
- React-Native获取文本框的值
要想获取文本框的值,首先我们需要看一下官方文档的解释: 这里的意思是说当文本框的内容改变的时候,文本框的输入的内容就会作为一个参数进行传递.因此我们就可以获取到文本框里面的内容就好了. constru ...
- 理解ThreadLocal(一)
早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. Th ...
- Angular中Controller之间的信息传递(第二种办法):$emit,$broadcast,$on
$emit只能向parent controller传递event与data( $emit(name, args) ) $broadcast只能向child controller传递event与data ...
- flash的as操作XML
//as3.0 var myXML:XML = new XML(); var XML_URL:String = "nav.config"; var myXMLURL:URLRequ ...