System 函数的实现|学习笔记

简介: 快速学习 System 函数的实现

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频System 函数的实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11005


System 函数的实现

 

内容介绍:

一、 system 函数的概述

二、 system 函数实现的流程图

三、 system 函数实现示例


一、system 函数的概述

1、功能

system 会调用 fork 函数产生子进程,子进程调用 exec 启动/bin/sh -c string 来执行参数 string 字符串代表的命令,此命令执行完后返回原调用进程。

2、参数

要执行的命令的字符串。

3、返回值

如果 command 为 NULL,则 system()函数返回非0,一般为1。

如果 system (在调用/bin/sh 时失败则返回127,其它失败原因返回-1。

4、注意

system 调用成功后会返回执行 shell 命令后的返回值。其返回值可能为1、127也可能为-1故最好应检查errno来确认执行成功。

5、提示

子进程调用 exec 启动/bin/sh-Cstring来执行参数string字符串所代表的命令,父进程等待子进程退出

 

二、流程图

image.png

流程图解析:

从创建进程以下属于 system,在 system 函数里首先要创建进程,在子进程里用exec去启动se执行命令,如果exec成功则执行命令,如果exec失败则打印出错信息退出子进程,父进程等紫禁城结束后回到循环的开始再去获取命令打印字符串。

三、System函数实现示例

写my_system.c程序,根据system说明实现system

(1)首先包含同文件

1 #include<stdio. h>

2 #include<unistd.h>

3 #include<stdlib.h>

(2)然后写根据流程图写system函数

4  Int my_ system (char *cmd_string)

5  {

6  pid_ t pid;

7

8  pid = fork() ;

9  if (pid<0)

10 {

11 return - 1;

12 }

13 else if(pid ==0)

14 {

15 execl ("/bin/sh","sh", "-C",cmd_string) ;

16 exit (127) ;

17 }

18 else

19 {

20

21 }

(3)等待父进程结束,定义一个变量

7  int status;

(4)父进程等待传一个变量

21  wait (&status)

(5)进函数前首先应判断

8  if(cmd_string==NULL)

9  return 1;

10 pid = fork()

11 if(pid<0)  

12 {

13 return -1

14 {

15 else if(pid ==0)

16 {

17 execl ("/bin/sh","sh", "-C",cmd_stringNULL3) ;

18 exit (127) ;

19 }

20 else

21 {

22 wait(&status);

23

24 }

25 return status;

26

27 }

28 int main()

29 {

30 charcmd[100] ;

31 intret ;

32 while (1 )

33 {

34 printf ("pleaseinput your cmd S") ;

35 fflush (stdout) ;

36 gets (cmd) ;

37 ret=my system(cmd) ;

38 printf("ret-adn",ret) ;

39 }

40 return 0

相关文章
|
关系型数据库 MySQL Java
浅谈订单重构之MySQL分库分表实战篇
浅谈订单重构之MySQL分库分表实战篇
476 0
|
网络协议 开发工具
网络编程之 listen()函数的使用与三次握手的理解
listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程
443 0
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
437 4
|
Shell Linux Android开发
【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
2189 0
|
Linux Shell
Linux中system函数
Linux中system函数
447 0
|
10月前
|
算法 搜索推荐 UED
C 端试用期考核指标
本文详细介绍了C端产品经理试用期的考核指标,涵盖产品成功、开发效率、用户体验、市场研究、团队协作和创新能力等方面。考核方式包括自评、上级评估、同事评估、用户评估和项目评估。通过定量与定性相结合的方法,确保全面客观地评估产品经理的工作表现,并附有实际案例供参考。
|
Unix C语言 C++
Python调用C/C++
Python调用C/C++
614 2
|
监控 负载均衡 安全
思科无线 LAN 控制器(WLC)基本配置详解
【4月更文挑战第22天】
2911 2
思科无线 LAN 控制器(WLC)基本配置详解
|
网络协议 网络安全
listen()函数第二个参数的作用?
listen()函数第二个参数的作用?
299 1
|
传感器 存储 安全
【物联网】Arduino 实验合集
【物联网】Arduino 实验合集
686 2