文章目录

  • 1.编写思路
  • 2.实现简易shell

1.编写思路

shell是一个命令行解释器,将从键盘捕获到的输入信息,进行解析,然后创建子进程(程序替换)等操作。具体流程如下:
1.获取命令行
2.解析命令行
3.创建子进程(fork)
4.替换子进程(execvp)
5.等待:父进程等待子进程退出 ,wait

2.实现简易shell

简易shell是对进程创建,进程替换,进程等待等基本操作的深入理解,通过这些基础知识可以编写基本的shell程序。

代码如下(示例):

 1 #include<stdio.h>                                                                                  2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 #include<sys/wait.h>6 7 int main(int argc,char* argv[])8 {9   while(1)10   {11     printf("[local@host~new]$ ");12     fflush(stdout);13     char buf[1024]={0};14     fgets(buf,1023,stdin);15     buf[strlen(buf)-1]='\0';16 17     int myargc=0;18     char *ptr=buf,*myargv[32]={NULL};19     //处理输入的字符串进行解析,20     //每个myargv[i]中存放一个字符串21     while(*ptr!='\0')22     {23        if(*ptr!=' ')24        {25          myargv[myargc]=ptr;26          myargc++;27          while(*ptr!='\0'&&*ptr!=' ')28           ptr++;29          *ptr='\0';30        }31        ptr++;32      }33      myargv[myargc]=NULL;34     //返回上一级目录35      if(strcmp("cd",myargv[0])==0)36      {37        chdir(myargv[1]);38        continue;39      }40     //创建子进程41      pid_t pid=fork();42      if(pid<0)43      {44        perror("fork error");45        continue;46      }else if(pid==0)47      {48        execvp(myargv[0],myargv);49        perror("execvp error");50        exit(-1);51      }52      //进程等待:等待子进程退出53      wait(NULL);54   }55   return 0;56 }   

《Linux进程控制---编写简易shell实现》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 计算机体系结构:嵌入式方法_计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...
  2. ni软件可以卸载吗_最强大的电脑端卸载软件!和你想的一样吗?进来看看!
  3. html ascii编码方式,HTML 字符集 参考手册
  4. Redis:20---常用功能之(发布与订阅)
  5. 《OpenStack云计算实战手册(第2版)》——1.4 安装OpenStack身份认证服务
  6. c#中接口的使用方法图解_C#中的接口interface的使用
  7. 怎么把python从c盘移到d盘_如何转移Pycharm的设置或者缓存到其他盘
  8. 谷歌pixel手机解BL锁、刷机、破解电信(史上最详细的帖子)
  9. SGD(随机梯度下降)详解
  10. Ember.js 初学指南
  11. c语言入门手机自学软件,C语言入门学习
  12. 电脑网络问题——IPv4无Internet访问权限
  13. linux英文转换成中文
  14. 悟以往之不谏,知来者之可追~
  15. Java执行引擎工作原理:方法调用
  16. 微信小程序合并单元格
  17. 操作系统中消费者与生产者的同步互斥问题
  18. Quartz技术简介
  19. vijos1027-spfa关键路径-休息中的阿呆
  20. 企业邮箱一年多少钱,邮箱注册教程,企业oa平台

热门文章

  1. Stroop effect检验
  2. 《2016年度中国智库大数据报告》发布 哪些智库进入TOP20榜单
  3. 2016全球计算机排名,高人能否把US News 2016全球计算机专业排名发出来看看?
  4. 总结VMware Workstation 与 Hyper-V 不兼容的几种处理方法
  5. 会ps会php,学会ps然后可以做什么
  6. 小说CMS采集-批量文章采集发布
  7. js获得html下拉框的值,JavaScript如何获取select下拉框中第一个值
  8. 腾讯云COS 服务临时密钥 JAVA SDK
  9. c语言新建一个单向链表菜鸟,【图片】菜鸟的进击——玩转C语言链表【c程序设计吧】_百度贴吧...
  10. 微信后台管理页面html