使用fork,exec,wait实现mybash
- 写出伪代码,产品代码和测试代码
- 发表知识理解,实现过程和问题解决的博客(包含代码托管链接)

1、fork

功能:创建一个新的进程

一个现存进程调用fork函数是linux内核创建一个新进程的唯一方法(交换进程、init进程和页精灵进程并不是这样,这些进程是由内核作为自举过程的一部分以特殊方式创建的)。

参数:pid_t fork(void);
返回值:一个是子进程返回0,第二个是父进程的返回值大于0.错误返回-1.
头文件:include<unistd.h>

2、exec

功能:在用fork函数创建子进程后,子进程往往要调用一个exec函数以执行另一个程序

当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程I D并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

返回值:成功了没返回值,失败了返回-1.
头文件:

#include<unistd.h>

3、wait

功能:等待进程
参数:pid_t wait(int*status);返回值:调用成功,返回子进程的PID,发生错误返回-1。错误原因放在全局变量errno中
头文件:
#include<sys/types.h>

#include<sys/wait.h>

waitpid
函数说明:在一个子进程结束之前,wait使其调用者阻塞,waitpid使用WNOHANG参数以非阻塞方式等待子进程,waitpid可以指定所需要等待的子进程。

二、实现bash

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <limits.h> void main()
{ char *command[];
command[] = "ls";
command[] = "-l";
command[] = ; int s,i=;
int rtn;
printf( ">" );
//printf("%s %s %s",command[1],command[2],command[3]);
printf("%s",command[]);
i=;
s=fork();
if ( s== ) {
//printf("%d\n",s);
execvp( command[], command ); //perror( command ); exit( errno );
}
else { //printf("%d\n",s); wait ( &rtn ); printf( " child process return %d\n", rtn ); }
}

实验结果

 

20165220 mybash的更多相关文章

  1. Mybash的实现

    Mybash的实现 要求: 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 背景知识 1. fork 使用 ...

  2. 2017-2018-1 20155215 第五周 mybash的实现

    题目要求 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 学习fork,exec,wait fork ma ...

  3. 2017-2018-1 20155306 《信息安全系统设计基础》Mybash的实现

    2017-2018-1 20155306 <信息安全系统设计基础>Mybash的实现 要求: 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解 ...

  4. 网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描

    网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描 实验任务 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服 ...

  5. 网络对抗技术 20165220 Exp3 免杀原理与实践

    实验任务 1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧: 2 通过组合应用各种技术实现恶意代码免杀(1 ...

  6. 2018-2019-2 网络对抗技术 20165220 Exp2 后门原理与实践

    实验内容 1.使用netcat获取主机操作Shell,cron启动2.使用socat获取主机操作Shell, 任务计划启动3.使用MSF meterpreter(或其他软件)生成可执行文件,利用nca ...

  7. 20165223 《信息安全系统设计基础》 实现mybash

    一.了解 mybash 1. 简介   bash 是 Bourne Again Shell 的缩写,是linux默认的标准shell(也是大家常说的系统内核),bash也是Unix/Linux上常见的 ...

  8. 实现mypwd和mybash

    一.pwd 1.学习pwd命令 man pwd查看pwd功能 可以得知pwd功能是打印当前目录 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 (1)man -k direc ...

  9. 20165220 2017-2018-2《Java程序设计》课程总结

    每周作业链接汇总: 20165220 我期望的师生关系 20165220 学习基础和C语言基础调查 20165220 Linux安装及学习 20165220 第一周学习总结 20165220 第二周学 ...

随机推荐

  1. Magento 架构原则

    Magento架构原则 >OOP体系结构和编程原则OOP体系结构和编程原则面向对象编程(OOP)设计允许软件组件具有最大的灵活性和可扩展性,允许您设计和实现高度定制的网站.面向对象原则的优点包括 ...

  2. CodeForces666E Forensic Examination

    题目描述 给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl​..pr​]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数. 如有多解输出最靠前的那一个. 题解 ...

  3. position:fixed not work?

    问题 在position:fixed的使用中,突然发现某个操作之后,fixed定位的位置变了?? bottom:0,left:0.本来应该在最下面,结果跑没影了. wtf?position:fixed ...

  4. GroupBox、TextBox、CheckBox、ToolStrip、RichTextBox、Timer控件

    GroupBox:划分窗体区域,内部可以拖放组件 TextBox:可编辑文本框,也可设置为只读 属性:ReadOnly(只读).PasswordChar(密码显示的符号,如*).Multiline(多 ...

  5. 【C#】判断字符串中是否包含指定字符串,contains与indexof方法效率问题

    #方法一:使用string.Contains方法 string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个key ...

  6. CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息

    1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...

  7. solr面板的使用

    创建数据库 先别着急点击Add Core,先去目录下创建几个文件. 去solrhome目录下创建一个文件夹,比如test,这个文件夹就是数据库文件夹.

  8. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  9. Spring Boot集成MyBatis的2种方式

    目录 写在前面 准备工作 配置数据库驱动 配置数据源 原生集成MyBatis 依赖配置 注册MyBatis核心组件 定义并使用映射器 通过MyBatis-Spring-Boot-Starter集成 默 ...

  10. Java设计模式之原型设计模式

    概述 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式 ...