Linux---system函数

article/2025/8/22 17:14:56

一、关于system函数

#include <stdlib.h>int system(const char *command);

返回值:成功,返回进程的状态值;当sh不能运行时,返回127;失败,返回-1。

源代码如下:

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;
}

通过源代码涉及三个函数:fork()函数waitpid()函数、以及execl函数。因此,只有这三个函数全部顺利运行才可以实现system函数。

实现步骤为:判断输入的字符串是否为空,随后调用fork函数创建子进程,通过子进程调用shell脚本对cmd字符串中的文件进行实现。

system函数的运用:

//待修改文件
LENG =0 //待修改数据初始值
HIGH =8
SPEED =9
HIGH =2
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main()
{int fdSrc;char *readBuf = NULL;fdSrc = open("./config.txt",O_RDWR);int size = lseek(fdSrc,0,SEEK_END);readBuf = (char*)malloc(sizeof(char)*size);lseek(fdSrc,0,SEEK_SET);read(fdSrc,readBuf,size);char* p = strstr(readBuf,"LENG =");if(p == NULL){printf("found error\n");exit(-1);}p = p+strlen("LENG =");*p = '8';lseek(fdSrc,0,SEEK_SET);write(fdSrc,readBuf,strlen(readBuf));printf("change success\n");close(fdSrc);    return 0;
}

 使用system函数进行调用

#include <stdio.h>
#include <stdlib.h>
int main()
{int status;int num;pid_t pid;while(1){printf("Please insert the num\n");scanf("%d",&num);if(num == 1){pid = fork();if(pid < 0){perror("fork\n");}if(pid == 0){printf("before system\n");if((status = system("./changedata")) == -1){perror("system\n");}printf("after system\n");exit(0);}else if(pid > 0){wait(NULL);}}else{printf("no wait\n");}}return 0;

 结果

system函数的优点:

1、由于system函数的实现调用了shell命令进行,因此在传参时无需指定路径,shell会根据当前环境变量下寻找到该可执行程序。

2、使用system而不是直接使用fork和exec的优点是:system进行所需的各种出错处理以及各种信号处理。

3、与exec族函数不相同的是:system函数调用可执行文件后不会覆盖原程序。而是在调用处继续执行。


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

相关文章

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;也可以是多智能体多任务的情况。 现在的深度强化学习领域虽然在很多特定任务上有着超越…

初探强化学习(11)Dyna类型的强化学习

为什么研究Dyna类型的强化学习呢&#xff1f; 主要是因为这个类型的强化学习是融合了model-based和model free两个类型的强化学习。 主要参考的博客是这个。说实话&#xff0c;我也是时隔三天后&#xff0c;第三次看了这个博客才彻底明白的。至于为什么名师&#xff0c;是因为我…

强化学习笔记:强化学习的约束

1 所需的样本数量过大 深度强化学习一个严重的问题在于需要巨大的样本量。举个例子&#xff0c;玩Atari游戏 图 19.17 中纵轴是算法的分数与 人类分数的比值&#xff0c; 100% 表示达到人类玩家的水准。 图中横轴是收集到的游戏帧数&#xff0c;即样本数量。 Rainbow DQN 需…

强化学习的模型

文章目录 前言一、强化学习是什么&#xff1f;二、基本模型1.基本框架2.学习过程 三.马尔科夫决策过程&#xff08;Markov Decision Process. MDP&#xff09;1.马尔科夫性质2.MDP的基本组成部分3.MDP的基本流程 四、基于模型和免模型的强化学习1.模型2.基于模型的强化学习&…

深度强化学习调研

深度强化学习&#xff08;DRL&#xff09; &#xff08;一&#xff09;强化学习 强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xff09;是机器学习领域的一个研究热点&#xff0c;当前已经广泛应用于工业制造、仿真模拟、机器人控制、优化与调度、游戏博…

强化学习总结

强化学习 一、强化学习概述 1.强化学习简介 强化学习最早可以追溯到早期控制论以及统计、心理学、神经科学、计算机科学等学科的一些研究。在最近的五到十年中&#xff0c;强化学习在机器学习和人工智能研究者中得到了大量的关注&#xff0c;它描绘了一种在不进行具体指导的情…