【Linux】用进程控制知识做一个简易版shell
文章目录
- 什么是shell
- 图示
- 分析
- 代码
什么是shell
shell
是命令行解释器的统称- 当前使用的shell的名字是
bash
,bash
其实也是一个程序- 当前我使用的是
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相关推荐
- python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri
原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...
- 实现用java做一个简易版《羊了个羊》小游戏(附源代码)
该项目是跟着这个b站视频一步一步写出来的,初学java有些地方我看不是很明白,但是讲解很仔细,大家可以看原视频,我没有添加背景音乐和背景图片,做出来的效果也勉勉强强. 代码已经上传到github上了, ...
- js计算器代码加减乘除_如何用jQuery做一个简易版计算器
经过几个小时地敲敲打打,终于把这一部分的代码完成了. 这类问题的难点不在于布局,而是如何恰当地使用jQuery达成计算.交互的目的,比如储存.显示数值,数据类型的转换等. 在听老师讲课之前的我,思路是 ...
- Linux系统编程下做一个简易的shell
自主实现一个shell--------minshell shell:命令行解释器-------解释执行用户的输入(完成相对应的功能) 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls ...
- [Java]用面向对象的知识来做一个简易版植物大战僵尸
package java07;//先设置植物的基础属性 public class Zhiwu {String name;int hp;int attack;//构造方法public Zhiwu(Str ...
- 用JAVA 做一个简易版的坦克大战(只实现基本功能)
不太会写文章,只是为了记录自己做过的东西 文章目录 前言 一.大概思路 二.主要代码 1.Tank.java 2.Shot.java 3. Mypanel.java 4.Hero.java 5.Ene ...
- 使用 PyQT5 来做一个简易版库存管理系统(三)
上篇已经做好了查询出入库单的功能,那么查询的数据要从哪里来呢?这一篇就来做一下出/入库单录入. 一.录入界面规划 还是使用查询功能中使用过的控件QTableWidget,然后底下放置三个按钮,新增.删 ...
- 【Linux操作系统】--攥写一个简易的shell工具
目录 做一个简易的shell 第一步:打印提示符,在同一行打印出提示符 第二步:获取标准输入,获取命令字符串 第三步:将字符串分割,解析字符串 第四步:替换进程,执行第三方命令 3.5.执行第三方命令 ...
- 第三章:做一个简易登陆界面
一.内容 做一个简易的登陆界面,包含: 1.有账号输入和密码输入 2.有登陆和取消按钮 3.密码要带有屏蔽功能 4.通过取消按钮讲一点槽函数的运用 二.创建工程(初次做这个小例程,附带上建工程的步骤) ...
最新文章
- 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
- c#dev tabcontrol 与嵌套gridcontrol 总结
- Isomorphic Strings
- 雅虎开源发布/订阅消息平台Pulsar
- ionic@2.0 beta版本安装指南
- 动态生成数据后绑定事件
- qtp连接mysql 无驱动_QTP连接MySQL
- svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢
- Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?
- 交叉编译iperf源代码
- 4位格雷码的顺序编码_整理丨一文掌握编码器的工作原理!
- Linux进程最大socket数,Linux下高并发socket最大连接数所受的各种限制(详解)
- 后端向前端返回图片URL,并向后端传递base64格式URL
- R语言-上海二手房数据分析
- 用Python求三角形面积
- java写宽带连接.adsl拨号,并且检测断线自动重新连接,更换ip
- 几何学五大公理_数学几何的五大公理、五大公设是什么?
- 为何世界足坛历史射手王是C罗?
- Shamir秘密共享算法
- 税务局计算机相关岗位,国家公务员 县区级国税局招收计算机专业的,进去之后做什么。虽然是计算机专业,但学的不好。不知需要这个 - 赏学吧...