OSLab课堂作业2
日期:2019/3/23
内容:
|
实现内容 |
要求 |
|
mysys.c |
实现函数mysys,用于执行一个系统命令。
|
|
sh1.c |
实现shell程序,要求具备如下功能。
$ echo arg1 arg2 arg3 $ ls /bin /usr/bin /home
$ cd /bin $ pwd /bin |
mysys.c
|
/************************************************************************* > File Name: mysys.c > Author: sinkinben > E-mail: sinkinben@qq.com > Created Time: Sat 23 Mar 2019 08:06:40 AM CST ************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #define SIZE 1024 static void mysys(const { if(command == NULL) { return; } //execl("/bin/bash", "bash", "-c", command, NULL); //这样做当前的进程就会清空,无法返回main memset(program, 0, sizeof(program)); strcpy(program, command); char *arg; strtok(program, " "); arg = strtok(NULL, ""); pid_t pid = fork();//新建一个进程 if(pid == 0) { execlp(program, program, arg, NULL); exit(-1); } int status; wait(&status);//等待子进程结束 if(status != 0) printf("command '%s' does not exist...\n", command); }
int main() { printf("--------------------------------------------------\n"); mysys("ls /"); printf("--------------------------------------------------\n"); mysys("echo HELLO WORLD"); printf("--------------------------------------------------\n"); mysys("ls -a"); printf("--------------------------------------------------\n"); mysys("not exist command"); printf("--------------------------------------------------\n"); return }
|
myshell.c
|
/************************************************************************* > File Name: myshell.c > Author: sinkinben > E-mail: sinkinben@qq.com > Created Time: Sat 23 Mar 2019 10:46:26 AM CST ************************************************************************/
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define BUFF_SIZE 1024*2 static static
void shell_handler(char *command) { char *arg; int status; pid_t pid; strtok(command, " "); arg = strtok(NULL, ""); //arg maybe NULL
if(strcmp(command, "cd") == 0) { chdir(arg); return; } pid = fork(); if(pid == 0) { execlp(command, command, arg, NULL); exit(-1); } wait(&status); if(status != 0) { printf("command '%s' does not exist...\n", command); }
}
int main(int argv, char *argc[]) { puts("Welcome to MyShell :) "); printf("%s", usr); while( gets(buffer) != NULL) { if(strcmp(buffer, "exit") == 0) break; shell_handler(buffer); memset(buffer, 0, sizeof(buffer)); printf("%s", usr); } puts("Exit MyShell :)"); return }
|
OSLab课堂作业2的更多相关文章
- OSLab课堂作业1
日期:2019/3/16 作业:实现命令cat, cp, echo. myecho命令 #include <stdio.h> int main(int argc, char *ar ...
- 栋哥你好,让我们回顾最初认识C++的时候(课堂作业)
计算器的第一步,至今还记记忆犹新,本次的课堂作业,便是那个框架.闲话少叙,代码如下传送门: Main.cpp #include "stdafx.h" #include<ios ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 课堂作业-Bag类的实现
课堂作业-Bag类的实现 要求: 代码运行在命令行中,路径要体现学号信息,IDEA中,伪代码要体现个人学号信息 参见Bag的UML图,用Java继承BagInterface实现泛型类Bag,并对方法进 ...
- Java课程课堂作业代码
前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...
- Java课堂作业详解
今天的Java课堂留下了一个作业:使用Eclipse编写一个程序,使输入的两个数进行加和,并且输出他们的和.对于这个题目,我们首先可以把它分解成为三个不同的小步骤 第一步就是输入这两个数,因为我们无需 ...
- 百度前端学院js课堂作业合集+分析(更新中...)
第一课:简陋的登录框 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 面向对象程序设计_课堂作业_01_Circle
The 1st classwork of the C++ program 题目: Create a program that asks for the radius of a circle and p ...
- C++ 课堂作业1.0
c++第一次课堂作业点这里 题目要求:输入半径,计算圆的面积,在调用外部函数,无需使用类.
随机推荐
- 8-导弹拦截一(n^2 and nlogn)
/*某国为了防御敌国的导弹袭击,研发出一套导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发拦截炮弹能够到达任意的高度,但是以后每一发拦截炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的多 ...
- 【转】HttpApplication的认识与加深理解
原文:http://www.cnblogs.com/whtydn/archive/2009/10/16/1584584.html HttpApplication对象是经由HttpApplication ...
- meterpreter 如何留后门,使攻击持久化
安装后门方法一:meterpreter >run persistence -X -i 5 -p 443 -r 192.168.0.108 Persistent agent script is 6 ...
- 关于UI设计行业的认识再到认识
相信很多同学和我一样提及到UI行业时,尤其是连门槛都没有踏入半步时,总会一脸茫然. 我也是一样的,我刚接触UI的前半个月,文章读过好多,作品也看过好多,什么"小白入门UI的十大建议啊&quo ...
- 一篇文章Tornado快速入门
Tornado是一个PythonWeb框架.一个异步网络库.通过使用非阻塞网络I/O,Tornado能够处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架. 作为 ...
- distinct group by 去重查询
select * from dc_restaurants; 31 select DISTINCT (restaurant_name),id from dc_restaurants ; 31 (会按照 ...
- 2018.08.31 bzoj1426 收集邮票(期望dp)
描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以 ...
- 2018.07.18 HAOI2009 逆序对数列(线性dp)
传送门 目前只会n2" role="presentation" style="position: relative;">n2n2的dp" ...
- 2018.07.10NOIP模拟 Knapsack(单调队列优化dp)
Knapsack 题目背景 SOURCE:NOIP2016-RZZ-4 T2 题目描述 有 n 个物品,第 i 个物品的重量为 ai . 设 f(i,j,k,l,m) 为满足以下约束的物品集合数量: ...
- 制作一个导航卫星绕地球转动的3D Flash动画
为便于了解卫星发射以及绕地球运转的过程,制作此动画.