Linux系统编程下做一个简易的shell
自主实现一个shell--------minshell
shell:命令行解释器-------解释执行用户的输入(完成相对应的功能)
步骤
1. 获取标准输入中的字符串
2. 对字符串进行解析[ls -l -a][ls ] [-l ] [-a]
3. 创建子进程
4. 子进程中进行程序替换
5. 父进程进行进程等待
自主minshell实现
1. 获取标准输入
2. 解析输入得到【命令名】+【运行参数】
3. 创建子进程,子进程中进行程序替换
4. 进程等待-----避免僵尸进程
又失败了,匹配失败了,缓冲区里如果只有一个回车,取不出\n。
%[^\n] 从缓冲区取数据的时候,遇到\n为止:【ls -l】
经过这一步之后,缓冲区中留下了\n,但是\n取不出来,导致scanf非阻塞
但又取不出来最后的\n字符
%*c 从缓冲区中取出一个字符(丢弃)
如果他不是空白字符
isspace 判断是否是空白字符
取出了一个字符串。
contiune 为了避免解析失败(一个回车),没有获取到字符串,还去向子进程创建命令。
wait避免真正的替换时子进程出现僵尸进程
完成了ls的功能
Linux系统编程下做一个简易的shell相关推荐
- 【Linux操作系统】--攥写一个简易的shell工具
目录 做一个简易的shell 第一步:打印提示符,在同一行打印出提示符 第二步:获取标准输入,获取命令字符串 第三步:将字符串分割,解析字符串 第四步:替换进程,执行第三方命令 3.5.执行第三方命令 ...
- 【Linux】用进程控制知识做一个简易版shell
文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...
- linux系统编程下的open函数使用方法
目录 1.句柄(file descriptor 简称fd) 2.使用open前需要先包含头文件 3.参数说明 3.1 参数1(pathname) 3.2 参数2(flags) 3.3 参数3(mode ...
- Linux系统编程及应用——ubuntu环境下
Linux系统编程及应用--ubuntu环境下 程序由业务逻辑和系统访问两部分构成的.其中,业务逻辑是根据业务需求,按照设计好的逻辑规则,处理信息,与系统(平台)无关的:而系统访问则是利用操作系统所提 ...
- arduino智能浇花系统_解放双手!自己动手做一个简易智能浇花系统
原标题:解放双手!自己动手做一个简易智能浇花系统 面对疫情,宅在家的我们可以以各种方式为战"疫"一线的医护工作者.紧急研究病毒的科研人员.口罩厂日夜工作的人们......加油打气. ...
- Linux系统编程25:基础IO之亲自实现一个动静态库
本文接:Linux系统编程24:基础IO之在Linux下深刻理解C语言中的动静态库以及头文件和库的关系 文章目录 A:说明 B:实现静态库 C:实现动态库 A:说明 前面说过,库其实就是头文件和和.a ...
- 【Linux系统编程】信号 (下)
00. 目录 文章目录 00. 目录 01. 信号集 02. 信号阻塞集 03. sigaction函数 04. 附录 01. 信号集 为了方便对多个信号进行处理,一个用户进程常常需要对多个信号做出处 ...
- 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API
Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
最新文章
- Flex技术中的陷阱
- python爬虫股票分析准不准_教你用Python爬虫股票评论,简单分析股民用户情绪
- 图像的膨胀与腐蚀、细化
- Qtum量子链受邀出席日本早稻田研究所区块链教育讲座
- 求一个数是几位数,并求每位数相加的和
- 数据结构-堆 C与C++的实现
- shell命令wc,md5sum,basename
- git常用命令,冲突
- 使用js调用摄像头拍照
- Tool -- 01 -- xml与map相互转换
- xshell上传本地文件命令_linux redhat怎么用xshell上传本地文件
- 1、mysql创建事件
- stm32内部基准电压
- Git使用:拉取最新代码、提交本地代码到远程仓库冲突
- RFC 文档(1001-1500)
- python读取加密word_Python-使用zipfile读取受密码保护的Word文档
- Java小游戏--舒尔特方格
- linux内核内存管理slub
- 无界键鼠(MouseWithoutBorders)的安装与无法连接的解决方案
- 机器学习—聚类(一)(L—P范数/闽可夫斯基距离/马氏距离/相关系数/夹角余弦)
热门文章
- perl6正则 4: before / after 代码断言: ?{} / !{}
- OpenSSL再曝CCS注入漏洞-心伤未愈又成筛子
- Using .NET C# LDAP Library(Novell.Directory.Ldap)
- 计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路
- python运行原理_Python线程池及其原理和使用(超级详细)
- c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头
- Java两种设计模式_23种设计模式(11)java策略模式
- protected访问权限_权限修饰符 /重写
- CSDN编程挑战——《进制转换》
- Win32ASM学习[17]:条件跳转