操作系统课程作业实现shell

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六简单shell

一、实验目的

通过实现一个简单的shell命令解释器,加深对Windows系统调用的理解,同时了解管道命令的设计实现机制。

二、实验内容

在Windows平台上实现Linux的某些命令:

•展开指定目录:myls [dir]

•文件查看和连接:mycat [-n] [file1 file2……]

•显示文档的开头:myhead number filename

•排序:mysort [file1 file2 ……]

•统计可执行文件执行时间:mytime program1.exe

•复制文件:mycp a b

•自定义出错提示命令:mysl

分别对应于Linux系统中的ls cat head sort time cp sl命令,在具体设计实现的时候用法做了简化。其中,mycat、myhead和mysort为三条管道命令,例如:

mysort file1.txt file2.txt | myhead 6 | mycat -n

三、程序设计与实现

1、程序中使用的结构体

(1) 处理输入命令字符串的自定义结构体CMD,定义如下

struct CMD{

int cmdposi[10];//记录每条管道命令在命令字符串中是第几个字符串

int lastcmdposi; //最后一条命令是第几条命令

int subcmdparameter[10];//每条管道命令所带的参数个数

char* subcmd[10][10];//记录命令行中的每一个字符串}cmd;

对于输入命令:mysort file1.txt file2.txt | myhead 6 | mycat –n

字符串的位置: 0 1 2 3 4 5 6 7 8

cmdposi[]: cmdposi[0]=0 cmdposi[1]=4 cmdposi[2]=7

subcmd[0]: mysort file1.txt file2.txt

subcmd[][] subcmd[1]: myhead 6

subcmd[2]: mycat –n

(2) 创建进程时,PROCESS_INFORMATION结构返回有关新进程及其主线程的信息。其结构定义如下:

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess; //新创建进程的句柄

HANDLE hThread; //新创建进程的主线程的句柄

DWORD dwProcessId; //新创建进程的标识

DWORD dwThreadId; //新创建进程的主线程的标识

} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;

(3) 获取系统时间时,使用到SYSTEMTIME结构体,其定义如下:

typedef struct _SYSTEMTIME {

WORD wYear;//年

WORD wMonth;//月

WORD wDayOfWeek;//星期

WORD wDay;//天

WORD wHour;//小时

WORD wMinute;//分钟

WORD wSecond;//秒

WORD wMilliseconds;//毫秒

} SYSTEMTIME, *PSYSTEMTIME;

(4) 在调用函数FindFirstFile、FindNextFile时,将找到的文件的信息存储在

win32_FIND_DATA结构体中。

typedef struct _WIN32_FIND_DATA {

DWORD dwFileAttributes;//文件属性

FILETIME ftCreationTime;//文件创建时间

FILETIME ftLastAccessTime;//文件最后一次访问时间

FILETIME ftLastWriteTime;//文件最后一次修改时间

DWORD nFileSizeHigh;//文件长度高32位

DWORD nFileSizeLow;//文件长度低32位

DWORD dwReserved0;//系统保留

DWORD dwReserved1;//系统保留

TCHAR cFileName[MAX_PATH];//长文件名

TCHAR cAlternateFileName[14];//8.3格式文件名

} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;

(5)FILETIME结构体用来记录文件时间,该结构是表示100纳秒间隔数为64位值从1601年一月1日。

typedef struct _FILETIME {

DWORD dwLowDateTime;//低32位

DWORD dwHighDateTime;//高32位

} FILETIME, *PFILETIME, *LPFILETIME;

2、使用的主要Windows API

(1) CreateNamedPipe()函数

作用:创建命名管道

调用格式:

HANDLE WINAPI CreateNamedPipe(

LPCTSTR lpName,//管道名称

DWORD dwOpenMode,//管道打开方式

DWORD dwPipeMode,//管道数据组织方式

DWORD nMaxInstances,//管道最大实例量

DWORD nOutBufferSize,//输出缓冲区长度

相关文档
最新文档