《Linux进程控制---编写简易shell实现》
文章目录
- 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实现》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- 计算机体系结构:嵌入式方法_计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...
- ni软件可以卸载吗_最强大的电脑端卸载软件!和你想的一样吗?进来看看!
- html ascii编码方式,HTML 字符集 参考手册
- Redis:20---常用功能之(发布与订阅)
- 《OpenStack云计算实战手册(第2版)》——1.4 安装OpenStack身份认证服务
- c#中接口的使用方法图解_C#中的接口interface的使用
- 怎么把python从c盘移到d盘_如何转移Pycharm的设置或者缓存到其他盘
- 谷歌pixel手机解BL锁、刷机、破解电信(史上最详细的帖子)
- SGD(随机梯度下降)详解
- Ember.js 初学指南
- c语言入门手机自学软件,C语言入门学习
- 电脑网络问题——IPv4无Internet访问权限
- linux英文转换成中文
- 悟以往之不谏,知来者之可追~
- Java执行引擎工作原理:方法调用
- 微信小程序合并单元格
- 操作系统中消费者与生产者的同步互斥问题
- Quartz技术简介
- vijos1027-spfa关键路径-休息中的阿呆
- 企业邮箱一年多少钱,邮箱注册教程,企业oa平台
热门文章
- Stroop effect检验
- 《2016年度中国智库大数据报告》发布 哪些智库进入TOP20榜单
- 2016全球计算机排名,高人能否把US News 2016全球计算机专业排名发出来看看?
- 总结VMware Workstation 与 Hyper-V 不兼容的几种处理方法
- 会ps会php,学会ps然后可以做什么
- 小说CMS采集-批量文章采集发布
- js获得html下拉框的值,JavaScript如何获取select下拉框中第一个值
- 腾讯云COS 服务临时密钥 JAVA SDK
- c语言新建一个单向链表菜鸟,【图片】菜鸟的进击——玩转C语言链表【c程序设计吧】_百度贴吧...
- 微信后台管理页面html