Linux system函数的执行命令并获取状态

article/2025/8/22 17:11:42


在linux中,可以通过调用system函数执行linux命令,但是如何获取执行命令的结果状态呢,也就是是否执行成功。


#include <stdio.h>
#include <stdlib.h>int main()
{int ret = -1;ret =system("cat /proc/mounts | grep sda");printf("\n ret = %d  ,\n WIFEXITED(ret) = %d,\n  WEXITSTATUS(ret)= %d \n",ret,WIFEXITED(ret),WEXITSTATUS(ret));return 0;
}





1.下面解释一下system函数的原理

system(执行shell 命令)
相关函数
      fork,execve,waitpid,popen
表头文件
      #include<stdlib.h>
定义函数
      int system(const char * string);
函数说明
      system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
      如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果 system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
      在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。


system的实现

int system(const char * cmdstring)
{pid_t pid;int status;if(cmdstring == NULL){return (1);}if((pid = fork())<0){status = -1;}else if(pid == 0){execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);-exit(127); //子进程正常执行则不会执行此语句}else{while(waitpid(pid, &status, 0) < 0){if(errno != EINTER){status = -1;break;}}}return status;
}

2.WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。


WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。


判断一个system函数调用shell脚本是否正常结束的方法应该是如下3个条件同时成立:
(1)-1 != status
(2)WIFEXITED(status)为真
(3)0 == WEXITSTATUS(status)




http://chatgpt.dhexx.cn/article/bSIVWhgM.shtml

相关文章

system函数常见用法

system函数 1.用来执行windows常用命令 我们知道 C语言是没有自己的窗口的&#xff0c;比如我们用printf函数在黑框上输出Hello World是其实是调用了windows的DOS交互窗口。 我们在C语言程序中用system可以给操作系统发送指定&#xff0c;其作用与直接在DOS窗口发送指令进行交…

system函数的总结

system函数的总结 2014-10-30 20:22 1216人阅读 评论(2) 收藏 举报 分类&#xff1a; 系统编程&#xff08;17&#xff09; 最近在看APUE第10章中关于system函数的POSIX.1的实现。关于POSIX.1要求system函数忽略SIGINT和SIGQUIT&#xff0c;并且阻塞信号SIGCHLD的论述&…

c/c++中system函数

原文地址&#xff1a;http://www.cnblogs.com/tianzeng/p/9550379.html 在windows下的system函数中命令可以不区别大小写&#xff01; 函数名&#xff1a; system 功 能&#xff1a; 发出一个DOS命令 用 法&#xff1a; #include <stdlib.h>int system(char *command…

system函数返回值,Linux

理论 我们先看下man手册是怎么说的man system RETURN VALUEThe value returned is -1 on error (e.g., fork(2) failed), and the return status of the command otherwise. This latter return status is in the format speci‐fied in wait(2). Thus, the exit code of …

Linux---system函数

一、关于system函数 #include <stdlib.h>int system(const char *command);返回值&#xff1a;成功&#xff0c;返回进程的状态值&#xff1b;当sh不能运行时&#xff0c;返回127&#xff1b;失败&#xff0c;返回-1。 源代码如下&#xff1a; int system(const char …

system函数的详细使用

目录 函数接口 作用 返回值 测试代码 参数 MODE命令 color命令 函数接口 _DCRTIMP int __cdecl system( _In_opt_z_ char const* _Command ); system函数已经被收录在标准c库中&#xff0c;头文件为<stdlib.h> 作用 执行系统命令调用命令处理器来执行命令。 如果…

基础知识篇——system函数

system是一个C语言和C下的函数。windows操作系统下system () 函数详解主要是在C语言中的应用&#xff0c;system函数需加头文件<stdlib.h>后方可调用。 Windows函数 函数名&#xff1a; system 功 能&#xff1a; 发出一个DOS命令 用 法&#xff1a; int system(char *…

php system函数用法,system函数如何使用?总结system函数实例用法

这篇文章主要简单分析了linux下system函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下简单分析了linux下system函数的相关内容,具体内容如下int libc_system (const char *line) {if (line == NULL) /* Check that we have a command processor available. It might …

system函数返回值

system&#xff08;执行shell 命令&#xff09; 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen 表头文件 #include<stdlib.h> 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程&#xff0c;由子进程来调…

c++system函数

希望各位给个赞&#xff0c;来个关注&#xff0c;100%回关 前言 system是一个比较常用的函数&#xff0c;说白了就是dos指令&#xff0c;下面说几个常用的 所需头文件&#xff1a;windows.h 1.system("cls") cls的作用是清屏,会把控制台都清空 #include<iostream&…

system函数

system函数的头文件: #include<stdlib.h>(我喜欢用万能头) 这是一个很好的用来 坑人 的函数 system(“cls”)可以实现清屏操作 #include<bits/stdc.h> #include<windows.h>//Sleep函数 using namespace std; int main() { cout<<“abcdefg”; Sleep(50…

system 函数常用方法

Hello&#xff0c;又见到你了&#xff0c;今天继续来介绍system函数的用法&#xff1b; 如果你的扫毒软件拦截了这个&#xff0c;说是病毒&#xff0c;不用怕&#xff0c;把它关了&#xff0c;我保证它不是病毒&#xff0c;关了之后就可以用了 1&#xff0c;首先登场的就是 sys…

对于强化学习的梳理

强化学习&#xff08;增强学习&#xff09; 概述 知识联系 强化学习是属于机器学习的一种&#xff0c;机器学习主要分监督学习、非监督学习、半监督学习、增强学习。 强化学习的核心逻辑&#xff0c;那就是智能体&#xff08;Agent&#xff09;可以在环境&#xff08;Envir…

多智能体强化学习:合作关系设定下的多智能体强化学习

0 前言 在多智能体系统中&#xff0c;一个智能体未必能观测到全局状态 S。设第 i 号智能体有一个局部观测&#xff0c;它是S的一部分。 我们假设所有的局部观测的总和构成了全局状态 1 合作关系设定下的策略学习 MARL 中的 完全合作关系 (Fully-Cooperative) 意思是所有智能…

强化学习基础

https://www.toutiao.com/a6641864763305361927/ 2019-01-02 19:47:27 内容目录&#xff1a; 一、强化学习的成功 二、概念和基础 2.1设计强化学习系统 2.2人工智能环境类型 三、问题公式化 3.1数学公式 3.2马尔可夫决策过程 3.3价值函数 四、RL训练术语 4.1基于模型…

强化学习基础05——gym

OpenAI gym OpenAI gym是强化学习最常用的标准库&#xff0c;如果研究强化学习&#xff0c;肯定会用到gym。 gym有几大类控制问题&#xff0c;第一种是经典控制问题,比如cart pole和pendulum。 Cart pole要求给小车一个左右的力&#xff0c;移动小车&#xff0c;让他们的杆子…

联邦强化学习

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/123710121 一、联邦强化学习介绍 强化学习&#xff08;RL&#xff09;是机器学习的一个分支&#xff0c;主要研究序列决策问题&#xff0c;强化学习系统通常由一个动态环境和与环境进行交互的一个或多…

初探强化学习(7)基于模型的强化学习的应用综述

本文是直接翻译一篇文章的&#xff0c;我先把原文地址放在这里。 原文名字为&#xff1a;Survey of Model-Based Reinforcement Learning: Applications on Robotics 这是一个2017年的论文 1. Introduction 强化学习&#xff08;Regulation Learning&#xff0c;RL&#xff0…

强化学习常见案例

文章目录 1. 有趣的强化学习视频1.1 小红小蓝捉迷藏1.2 红球绿球1.3 OpenAI机器人跑步1.4 OpenAI赛艇游戏&#xff08;CoastRunners&#xff09; 2.可以交互操作的游戏2.1 GridWorld2.2 Puck world 入门强化学习的时候&#xff0c;看到许多教程都给了很多强化学习的例子&#x…

多任务深度强化学习入门

理论概述 多任务深度强化学习&#xff0c;英文Multi-Task Deep Reinforcement Learning &#xff0c;简称MTDRL或MTRL。于MARL不同&#xff0c;它可以是单智能体多任务的情况&#xff0c;也可以是多智能体多任务的情况。 现在的深度强化学习领域虽然在很多特定任务上有着超越…