没有合适的资源?快使用搜索试试~ 我知道了~
操作系统课程作业实现shell.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2022-07-13
10:23:36
上传
评论
收藏 199KB DOC 举报
温馨提示
试读
14页
操作系统课程作业实现shell.doc
资源推荐
资源详情
资源评论
1 / 14
实验六 简单 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;
2 / 14
对于输入命令: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 时,将找到的文件的信息存储在
3 / 14
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,//输出缓冲区长度
剩余13页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3702
- 资源: 59万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功