自主实现一个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相关推荐

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

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

  2. 【Linux】用进程控制知识做一个简易版shell

    文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...

  3. linux系统编程下的open函数使用方法

    目录 1.句柄(file descriptor 简称fd) 2.使用open前需要先包含头文件 3.参数说明 3.1 参数1(pathname) 3.2 参数2(flags) 3.3 参数3(mode ...

  4. Linux系统编程及应用——ubuntu环境下

    Linux系统编程及应用--ubuntu环境下 程序由业务逻辑和系统访问两部分构成的.其中,业务逻辑是根据业务需求,按照设计好的逻辑规则,处理信息,与系统(平台)无关的:而系统访问则是利用操作系统所提 ...

  5. arduino智能浇花系统_解放双手!自己动手做一个简易智能浇花系统

    原标题:解放双手!自己动手做一个简易智能浇花系统 面对疫情,宅在家的我们可以以各种方式为战"疫"一线的医护工作者.紧急研究病毒的科研人员.口罩厂日夜工作的人们......加油打气. ...

  6. Linux系统编程25:基础IO之亲自实现一个动静态库

    本文接:Linux系统编程24:基础IO之在Linux下深刻理解C语言中的动静态库以及头文件和库的关系 文章目录 A:说明 B:实现静态库 C:实现动态库 A:说明 前面说过,库其实就是头文件和和.a ...

  7. 【Linux系统编程】信号 (下)

    00. 目录 文章目录 00. 目录 01. 信号集 02. 信号阻塞集 03. sigaction函数 04. 附录 01. 信号集 为了方便对多个信号进行处理,一个用户进程常常需要对多个信号做出处 ...

  8. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  9. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

最新文章

  1. Flex技术中的陷阱
  2. python爬虫股票分析准不准_教你用Python爬虫股票评论,简单分析股民用户情绪
  3. 图像的膨胀与腐蚀、细化
  4. Qtum量子链受邀出席日本早稻田研究所区块链教育讲座
  5. 求一个数是几位数,并求每位数相加的和
  6. 数据结构-堆 C与C++的实现
  7. shell命令wc,md5sum,basename
  8. git常用命令,冲突
  9. 使用js调用摄像头拍照
  10. Tool -- 01 -- xml与map相互转换
  11. xshell上传本地文件命令_linux redhat怎么用xshell上传本地文件
  12. 1、mysql创建事件
  13. stm32内部基准电压
  14. Git使用:拉取最新代码、提交本地代码到远程仓库冲突
  15. RFC 文档(1001-1500)
  16. python读取加密word_Python-使用zipfile读取受密码保护的Word文档
  17. Java小游戏--舒尔特方格
  18. linux内核内存管理slub
  19. 无界键鼠(MouseWithoutBorders)的安装与无法连接的解决方案
  20. 机器学习—聚类(一)(L—P范数/闽可夫斯基距离/马氏距离/相关系数/夹角余弦)

热门文章

  1. perl6正则 4: before / after 代码断言: ?{} / !{}
  2. OpenSSL再曝CCS注入漏洞-心伤未愈又成筛子
  3. Using .NET C# LDAP Library(Novell.Directory.Ldap)
  4. 计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路
  5. python运行原理_Python线程池及其原理和使用(超级详细)
  6. c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头
  7. Java两种设计模式_23种设计模式(11)java策略模式
  8. protected访问权限_权限修饰符 /重写
  9. CSDN编程挑战——《进制转换》
  10. Win32ASM学习[17]:条件跳转