文章目录

  • 什么是shell
  • 图示
  • 分析
  • 代码

什么是shell

  • shell是命令行解释器的统称
  • 当前使用的shell的名字是bashbash其实也是一个程序
  • 当前我使用的是centos7下实现一个简易版的minshell

图示

分析

shell的作用是读取一行新的输入,建立一个进程,在这个进程中运行程序,并等待这个进程结束。
因此一个shell需要完成以下过程,且shell不是只能执行一次命令,因此需要循环运行

1.获取命令行
2.解析命令行
3.建立一个新进程
4.替换子进程
5.父进程等待子进程退出

代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>#define MAX_CMD 1024
char command[MAX_CMD];int do_face()
{memset(command, 0x00, MAX_CMD);printf("minshell$ ");fllush(stdout);if(scanf("%[^\n]%*c", command) == 0){getchar();return -1;}return 0;
}
char **do_parse(char *buff)
{int argc = 0;static char *argv[32];char *ptr = buff;while(*ptr != '\0'){if(!isspace(*ptr)){argv[argc++] = ptr;while((!isspace(*ptr)) && (*ptr) != '\0'){ptr++;}}else{while(isspace(*ptr)){*ptr = '\0';ptr++;}}}argv[argc] = NULL;return argv;
}int do_exec(char *buff)
{char **argv = {NULL};int pid = fork();if(pid == 0) {argv = do_parse(buff);if(argv[0] == NULL){exit(-1);}execvp(argv[0], argv);}else{waitpid(pid, NULL, 0);}reutrn 0;
}int main(int argc, char *argv[])
{while(1){if(do_face() < 0)continue;do_exec(command);}return 0;
}

【Linux】用进程控制知识做一个简易版shell相关推荐

  1. python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri

    原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...

  2. 实现用java做一个简易版《羊了个羊》小游戏(附源代码)

    该项目是跟着这个b站视频一步一步写出来的,初学java有些地方我看不是很明白,但是讲解很仔细,大家可以看原视频,我没有添加背景音乐和背景图片,做出来的效果也勉勉强强. 代码已经上传到github上了, ...

  3. js计算器代码加减乘除_如何用jQuery做一个简易版计算器

    经过几个小时地敲敲打打,终于把这一部分的代码完成了. 这类问题的难点不在于布局,而是如何恰当地使用jQuery达成计算.交互的目的,比如储存.显示数值,数据类型的转换等. 在听老师讲课之前的我,思路是 ...

  4. Linux系统编程下做一个简易的shell

    自主实现一个shell--------minshell shell:命令行解释器-------解释执行用户的输入(完成相对应的功能) 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls ...

  5. [Java]用面向对象的知识来做一个简易版植物大战僵尸

    package java07;//先设置植物的基础属性 public class Zhiwu {String name;int hp;int attack;//构造方法public Zhiwu(Str ...

  6. 用JAVA 做一个简易版的坦克大战(只实现基本功能)

    不太会写文章,只是为了记录自己做过的东西 文章目录 前言 一.大概思路 二.主要代码 1.Tank.java 2.Shot.java 3. Mypanel.java 4.Hero.java 5.Ene ...

  7. 使用 PyQT5 来做一个简易版库存管理系统(三)

    上篇已经做好了查询出入库单的功能,那么查询的数据要从哪里来呢?这一篇就来做一下出/入库单录入. 一.录入界面规划 还是使用查询功能中使用过的控件QTableWidget,然后底下放置三个按钮,新增.删 ...

  8. 【Linux操作系统】--攥写一个简易的shell工具

    目录 做一个简易的shell 第一步:打印提示符,在同一行打印出提示符 第二步:获取标准输入,获取命令字符串 第三步:将字符串分割,解析字符串 第四步:替换进程,执行第三方命令 3.5.执行第三方命令 ...

  9. 第三章:做一个简易登陆界面

    一.内容 做一个简易的登陆界面,包含: 1.有账号输入和密码输入 2.有登陆和取消按钮 3.密码要带有屏蔽功能 4.通过取消按钮讲一点槽函数的运用 二.创建工程(初次做这个小例程,附带上建工程的步骤) ...

最新文章

  1. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
  2. c#dev tabcontrol 与嵌套gridcontrol 总结
  3. Isomorphic Strings
  4. 雅虎开源发布/订阅消息平台Pulsar
  5. ionic@2.0 beta版本安装指南
  6. 动态生成数据后绑定事件
  7. qtp连接mysql 无驱动_QTP连接MySQL
  8. svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢
  9. Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?
  10. 交叉编译iperf源代码
  11. 4位格雷码的顺序编码_整理丨一文掌握编码器的工作原理!
  12. Linux进程最大socket数,Linux下高并发socket最大连接数所受的各种限制(详解)
  13. 后端向前端返回图片URL,并向后端传递base64格式URL
  14. R语言-上海二手房数据分析
  15. 用Python求三角形面积
  16. java写宽带连接.adsl拨号,并且检测断线自动重新连接,更换ip
  17. 几何学五大公理_数学几何的五大公理、五大公设是什么?
  18. 为何世界足坛历史射手王是C罗?
  19. Shamir秘密共享算法
  20. 税务局计算机相关岗位,国家公务员 县区级国税局招收计算机专业的,进去之后做什么。虽然是计算机专业,但学的不好。不知需要这个 - 赏学吧...

热门文章

  1. shell脚本括号使用
  2. 【QCM2150】WCN3680 WFA 11ac STA 5.2.1/5.2.61测试失败
  3. B. A and B
  4. scrapy实战项目(简单的爬取知乎项目)
  5. 干货!史上最全Java进阶好书清单来了!
  6. 学校机房网上作业发放、提交系统案例
  7. Git使用中的一些常用小技巧
  8. kotlin类的成员变量 方法
  9. 基于SVM算法的人脸微笑识别
  10. 矩形选框工具 部分快捷键练习