操作系统课程大作业简单shell 附源码

发布 2022-09-10 11:22:28 阅读 3876

本shell简介:

shell 主控程序 400行。

对输入的命令进行处理,为各个命令创建进程,运行结束时终止进程。

myls 展开指定目录 200行。

使用格式:myls [dir]

参数说明:若dir不为“.”则展开dir,否则展开当前目录,显示文件创建时间、最后修改时间、大小等基本属性。

mycat 文本文件查看和连接 400行。

使用格式:mycat [-n] [file1 file2 ……

参数说明:由1开始对所有输出的行数编号: -n

myhead 显示文档的开头 300行。

使用格式:myhead number filename

参数说明:number为要显示的行数。

mysort 排序 300行。

使用格式:mysort [file1 file2 ……

参数说明:命令用于将所有文件内容按第一列来排序(若第一列相同,则看第二列……)

mycp 复制文件 150行。

使用格式:mycp sour_dir des_dir

参数说明:sour_dir为源目录,des_dir为新创建的目录。

mytime 统计可执行文件执行时间 100行。

使用格式:mytime

参数说明:参数为一个可执行文件。

mysl 错误提示 400行。

使用格式:mysl

说明:在linux系统中,ls命令是很常用的,经常会误写成sl,这时shell会显示一辆跑动的小火车,以此提示程序员。

命令举例:1)mycat -n file1 | myhead 3 将文件 file1 的内容加上行号后显示前3行。

2)myhead 3 file1 | mycat -n 将文件 file1 的内容显示前3行后加上行号。

注:上述两条命令的操作最终结果等价)

3)mysort file1 file2 | mycat -n | myhead 5 将 file1 和 file2 的内容合并排序、加上行号、显示前5行。

源码:主控程序:

#include<>

#include<>

#include<>

#include

using namespace std;

tchar szfilename[10][max_path] =array that stores the handle of process

process_information pi[10] =array that stores the structure variable of process

int counter_child_process = 0; /the number of created process

struct "myhead 3 file1 | mycat -n"

int cmdposi[10cmdposi[0] =0,cmdposi[1] =4

int lastcmdposilastcmdposi = 1

int subcmdparameter[10];/subcmdparameter[0] =2, subcmdparameter[1] =1

char* subcmd[10][10subcmd[0]: myhead 3 file1 subcmd[1]: mycat -n

subcmd[0][0] =myhead, subcmd[0][1] =3, subcmd[0][2] =file1

subcmd[1][0] =mycat, subcmd[1][1] =n */

cmd;void seperate_cmd(char* cmdline)

handle create_cmd_process(char* (arr)[10],int cmd_row,char *cmdtype,int islastcmd);

void create_mytime(char* cmdline)

void create_myls(char* cmdline)

void create_mycp(char* cmdline)

void showruntime(systemtime a,systemtime b);

void create_mysl(char* cmdline)

int main(int argc,char* ar**)

char* cmdword[10] =

int i;

for(i=0; i<10; i++)

int j = 0;

char c;

while(1)

cmdwordnum = i;

if(strcmp(cmdword[0],"mytime")=0)

create_mytime(cmdword);

else if(strcmp(cmdword[0],"myls")=0)

create_myls(cmdword);

else if(strcmp(cmdword[0],"mysl")=0)

create_mysl(cmdword);

else if(strcmp(cmdword[0],"mycp")=0)

create_mycp(cmdword);

else{for(int i=0; i<10; iinit 、 and

for(int i=0; iif ( strcmp(cmdword[i],"myhead")=0 ||

strcmp(cmdword[i],"mycat")=0 ||

strcmp(cmdword[i],"mysort")=0 ){

int jfill

for(j=0; j< j++)

seperate_cmd(cmdword); fill subcmd

int islastcmd = false;

for(int i=0; i<= icreate child process of each subcmd

if(i ==

islastcmd = true;

hcmd[i] =create_cmd_process( i, cmdword[ islastcmd);

if(hcmd[i] =invalid_handle_value){

printf("create process %s failed !!n",cmdword[

2019操作系统课程大作业

1.起评分75分 动态分区存储分配方案实现模拟练习。假设一个系统的初始态下,可用内存空间为640k,并全部为空闲。现有下列请求序列发生,请分别用最先适应算法和最佳适应算法为作业分配和 内存块,并编程模拟分配 过程,程序运行时要显示出每次分配和 后的空闲分区链的情况以及内存占用情况图 哪个作业占用 起...

操作系统大作业a

一 填空 14分 1 在设备管理中,为了克服独占设备速度较慢 降低设备资源利用率的缺点,引入了虚拟分配技术即用共享设备模拟独占设备。2 常用的内存管理方法有和。3 动态存储分配时,要靠硬件地址变换机构实现重定位。4 在存储管理中常用虚拟存储器方式来摆脱主存容量的限制。5 在页式管理中,页式虚地址与内...

操作系统大作业a

一 填空 14分 1 在设备管理中,为了克服独占设备速度较慢 降低设备资源利用率的缺点,引入了即用共享设备模拟独占设备。2 常用的内存管理方法有和。3 动态存储分配时,要靠硬件地址变换机构实现。4 在存储管理中常用方式来摆脱主存容量的限制。5 在页式管理中,页式虚地址与内存物理地址的映射是由和完成的...