本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 在页式管理中,页式虚地址与内存物理地址的映射是由和完成的...