缘起

Linux平台下开发程序时,常常要处理一些锁碎的事情linux c执行shell命令,例如删掉某个目录下符合某种特点的文件,安装程序到某个目录下,打包备份一个程序,这种在Linux中很容易用shell来处理。在开发后台程序时永久免费linux服务器,也常常要处理程序的安装、升级、备份,一般这种功能用shell脚本实现。所以不可避开的,要在程序中调用shell命令或shell脚本。之前考虑过这个问题,但没有详述。近来在维护一个项目时linux ftp,要在C++程序中调用shell脚本来实现程序的升级和备份,所以花时间研究了一下,遂成本文。

方式一:使用system函数

#includeintsystem(constchar*string);

system()会调用fork()形成子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令linux c执行shell命令,此命令执行完后旋即返回原调用的进程。

linux c执行shell命令_命令执行漏洞_命令执行常见的场景有哪些

返回值:

命令执行漏洞_linux c执行shell命令_命令执行常见的场景有哪些

=-1:出现错误

=0:调用成功并且没有出现子进程

>0:成功退出的子进程的id

假如system()在调用/bin/sh时失败则返回127,其他失败缘由返回-1。若参数string为空表针(NULL),则返回非零位。假如system()调用成功则最后会返回执行shell命令后的返回值,而且此返回值也有可能为system()调用/bin/sh失败所返回的127,因而最好能再检测errno来确认执行成功。

按照system()的返回值来判定shell脚本是否执行成功是一件比较冗长的事情(参见这两篇文章:博文一,博文二),且难以取得shell脚本的返回值。所以一般只是用system()来调用一个shell命令&#

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复