C语言有一个system函数(在<stdlib.h>头中,C++则为<cstdlib>头),可以用来调用终端命令。原型如下:

  1. int system(const char *cmdline /* 命令字符串 */);

system函数调用/bin/sh  执行特定的shell命令,阻塞当前的进程知道shell命令执行完毕。执行system实际上是调用了fork函数(产生新进程)、exec函数(在新进程中执行新任务)、waitpid函数(等待新进程结束)。
函数详解
在 Linux 系统中(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#include<stdlib.h>
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
如果fork()失败 返回-1:出现错误
如果exec()失败,表示不能执行Shell,返回值相当于Shell执行了exit(127)
如果执行成功则返回子Shell的终止状态
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),仅当命令处理程序可用时,返回非零值,可以通过这一特征判断在一个给定的操作系统上是否支持system函数(当system函数返回值为0时,表明system函数无效,在UNIX系统中,system函数总是可用的);。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
参考链接:http://blog.csdn.net/augusdi/article/details/20002519

转载于:https://www.cnblogs.com/sylar5/p/6640078.html

C 语言中可以调用命令行指令的 system()函数相关推荐

  1. qt执行命令行失败_QT中QProcess调用命令行的痛苦经历

    在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...

  2. QT中QProcess调用命令行的痛苦经历

    在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...

  3. windows下,C++中调用命令行并且获取命令行的输出

    说明,上一次写到了使用共享内存来实现获取命令行的输出.但是共享内存实际上是实现两个进程间的通信.其使用方式为在本进程创建共享内存,并在另外一个进程中调用cmd将结果写入到共享内存中,实际没有处理如何调 ...

  4. java图形化界面操作和命令行操作,常用的命令行指令

    第1章  JAVA语言概述 系统软件即操作系统 做开发需要掌握一定的命令行指令 Java程序执行需要借助命令行 打开cmd方式 一 点击搜索输入cmd 二 按window键加R键,弹出窗口后再输入cm ...

  5. java调用命令行命令_Java命令行界面(第4部分):命令行

    java调用命令行命令 我的Java命令行解析系列的第四部分介绍了Commandline ,它被描述为 "用于解析命令行参数的Java库",它"基于使用注释从命令行参数到 ...

  6. python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”

    参见英文答案 > piping in shell via Python subprocess module 4个 我试着用python调用命令行执行一些文件.但是,当有一个包含"ech ...

  7. 第四篇:ROS常用命令行指令【重点】

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.常用的ROS命令行指令 1.系统类指令 2.启动类指令 3.节点 ...

  8. windows 中开机自启动命令行(CLI)

    windows 中开机自启动命令行(CLI) English-Version 1. 创建自启动批处理文件 新建一个.txt文档,在里面输入代码 @echo off CMD 然后把文件更名为start. ...

  9. docker-compose模板指令 命令行指令

    一.docker-compose两个重要的概念 项目(project):有多个服务共同组成的完整的业务单元,定义在docker-compose.yml文件中 服务(service):一个服务对应一个应 ...

最新文章

  1. 2022-2028年中国联合办公行业深度调研及投资前景预测报告
  2. SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
  3. vue调用后台api_基于ThinkPHP V5+VUE开发的面向API的后台管理系统
  4. 工作经常使用的SQL整理,实战篇(三)
  5. 【Jmeter】压力测试工具 Jmeter 使用
  6. php公告滚动源码,10行js代码实现上下滚动公告效果方法
  7. 为什么单例模式是邪恶的(译)
  8. WinCE EBOOT中的BootPart分析
  9. LeetCode 810. 黑板异或游戏(博弈推理)
  10. MIT研究生解说数学体系
  11. 编译速度谁“最快”?25岁的 C++Builder 还能打!
  12. python表单验证_python表单验证封装
  13. Unity3D中粒子系统
  14. CPU卡密钥管理系统
  15. 宏碁暗影骑士2022 i7-12700h+intel ax1650网卡+ubuntu1804+linux5.19 安装网卡驱动
  16. WPS简历模板的图标怎么修改_研究了 2000 份 BAT 员工的简历后,我发现这 3 个共同点...
  17. [分享]RFID之我的M1离线卡爆破过程
  18. linux修改文档拥有人为,Linux系统修复
  19. Bussiness 2.0:IT行业新近出现的五大新职业
  20. 【友盟+】国庆假期旅游类APP使用报告(下)

热门文章

  1. Linux C编程学习--main()函数简析
  2. struct作为map的key时,需要重载该结构体
  3. Hi3515的开发板 Hi3515 SDK编译出错 提示缺少libpciv.a的解决办法
  4. 修改系统默认路径,如收藏夹、桌面、我的文档
  5. Linux下显示当前目录下的全部目录或文件
  6. [react] 你知道Virtual DOM的工作原理吗?
  7. 前端学习(2906):Vite 解决了 Webpack 哪些问题
  8. 前端学习(2797):实现右侧数据的渲染
  9. 前端学习(2637):this
  10. 前端学习(2149):webpack之ES6到ES5的转换