版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈尔滨理工大学课程设计(计算机操作系统)题目: 用户命令接口 班级: 姓名:指导教师:系主任: 2014年03月01日目 录1用户命令接口课程设计11.1 题目分析11.2 数据结构11.3 流程图11.4 实现技术21.5 设计结论和心得22 Linux代码分析32.1 功能说明32.2 接口说明32.3 局部数据结构32.4 流程图32.5 以实例说明运行过程4第1章1用户命令接口课程设计1.1 题目分析用户命令接口是为了用户直接或间接控制自己的作业,操作系统向用户提供了命令接口。命令接口是用户利用操作系统命令组织或控制作业的执行或管理计算机系统。命令是在命令输入界面上输入,由系统在后台执
2、行,并将结果反映到前台界面或者特定的文件内。1.2 数据结构1、为Windows操作系统建立一个兼容Unix命令的命令接口; 2、实现命令包括ls,cat,cp,mv,md,rd,cd,sort,more,print,命令的内容与详细格式请查阅uni命令手册; 3、可以字符形式接收命令,执行命令,然后显示命令执行结果。1.3 流程图1.4 实现技术为实现上述设计,采用C+语言,VS2008开发环境。具体采用的技术如下:(1)void lsFunction(string *lsinput,int lscount)函数实现显示一个目录中的文件和子目录。如果失败返回显示“路径可能不存在!” 。(2)
3、void catFunction(string *catinput,int catcount)函数实现打开文件并显示内容。如果失败返回显示“无法打开文件!”。(3)void cpFunction(string *cpinput,int cpcount)函数实现复制文件和目录树。如果成功返回显示“复制成功”,否则显示“文件或目录可能不存在!” 。(4)void mvFunction(string *mvinput,int mvcount)函数实现将文件从一个目录移到另一个目录。如果成功返回显示“成功” ,否则显示“文件或目录可能不存在!” 。(5)void mdFunction(string *
4、mdinput,int mdcount)实现在指定的目录或文件下创建目录。(6)void rdFunction(string *rdinput,int rdcount)函数实现删除空目录。如果成功返回显示“删除目录成功” ,否则显示“文件夹可能不存在或文件夹不为空!” 。(7)void cdFunction(string *cdinput,int cdcount)函数实现显示当前目录的名称或将其更改。如果失败返回显示“路径可能不存在!” 。#include windows.h#include fstream#include string#include iomanip#include iost
5、reamusing namespace std;#define PRINTHEADHELP void cathelpFunction()coutPRINTCATHELPendl;infile.close();return f;*/void catFunction(string *catinput,int catcount)void printPath(void);if (1 = catcount)cout命令语法不正确!endl;printPath();if (2 = catcount)ifstream infile(catinput1.c_str(),ios:in);if (!infile)
6、/-3、cpvoid cphelpFunction()coutPRINTCPHELP cp 源文件路径 目的文件路径/另外在copy的过程可以进行重命名操作,即cpinput2.c_str()void printPath(void);if (1 = cpcount)cout命令语法不正确!endl;printPath();elseif (!CopyFile(cpinput1.c_str(),cpinput2.c_str(),1)cout文件或目录可能不存在t!endl;printPath();elsecout复制文件成功!endl;printPath();1.5 设计结论和心得操作系统的基本特
7、征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,除了更深的了解这个算法,而且对C语言进行了复习,而且其过程中有很多的知识点都不记得了,所以在此感谢在此过程中帮助过我的老师和同学。最后的感悟就是:只要你亲自动手,你就能学到知识。2 Linux代码分析2.1 功能说明在操作系统中,有些进程存在着相互制约的关系,这些制约关系来源于并行进程的相互合作和资源共享。为了使合作进程和资源共享进程能协调一致的向前推进,必须使他们保持联系,一边相互了解。进程相互间需要交换一定数量的信息,以便协调一致共同完成指定的任务. 这种机制就叫做进程间通信,或IPC
8、.在linux 中支持UNIX SYSTEM V 的三种通信机制: 消息队列, 信号量和共享内存. 现就消息队列这种机制进行分析.2.2 接口说明本程序的输入参数为:1. struct ipc_perm key_t key; / 整型, 0表示private, 非0表示publicushort uid; / 资源拥有者的有效标识ushort gid; / 资源拥有者所在组的有效标识ushort cuid; / 资源创建者的有效标识ushort cgid; / 资源创建者所在组的有效标识 ushort mode; / 访问模式ushort seq; / 序列号, 计算标识符 ; 系统在创建消息队
9、列的同时设定了访问权限, 并返回一个标识. 进程通信时必须先传递该标识, 待函数ipcperms()确认权限后才可以访问通信资源. 访问权限由ipc_perm 结构描述. 通过key可以得到引用标识, 从而访问通信资源. Key 为public , 则任何进程都可以通过key得到引用标识.2. struct msg struct msg *msg_next; /消息队列中的下一个 long msg_type; /消息的类型 char *msg_spot; /存放消息内容的地址 time_t msg_time; /消息发送的时间 short msg_ts; /消息的长度 ; msg 结构用来存放
10、消息的有关信息.3. struct msqid_ds struct ipc_perm msg_perm; struct msg *msg_first; /指向消息队列的第一条消息 struct msg *msg_last; /指向消息队列的最后一条消息 time_t msg_stime; / 最后发送时间 time_t msg_rtime; /最后接收时间 time_t msg_ctime; /最后修改时间 struct wait_queue *wwait; /写消息进程的等待队列 struct wait_queue *rwait; /读消息进程的等待队列 ushort msg_cbytes;
11、 /队列中消息的字节数 ushort msg_qnum; /队列中的消息数 ushort msg_qbytes; /队列中消息的最大字节数 ushort msg_lspid; / 最后一个发送消息的进程的标识号 ushort msg_lrpid; /最后一个接收消息的进程的标识号; 每一个msqid_ds 结构代表一个消息队列, 是进程读写的信息的存储空间。 static struct msqid_ds *msgqueMSGMNI; 定义了一个消息队列数组msgque, 数组的元素类型是指向msqid_ds 结构的指针。消息在队列中是按到来的顺序维护。进程读消息时,这些消息按FIFO从队列中移
12、去。4. struct msgbuf long mtype; /消息的类型 char mtext1; /消息的内容; 存放消息的信息。5. struct wait_queue struct wait_queue *next; /指针指向等待队列的下一个 struct task_struct *task; /*task_struct 存放的是进程控制块的信息*/ ;wait_queue代表各种各样的进程等待队列。2.3 局部数据结构1. 初始化模块:void _init msg_init (void)函数参数:无函数返回类型:空函数功能:对消息队列及各变量初始化 int id; for (id
13、= 0; id MSGMNI; id+) msgque id = (struct msqid_ds *) IPC_UNUSED; /* 给指向消息队列的指针分配空间,标志为IPC_UNUSED,定义见 linux/ipc.h : #define IPC_UNUSED(void ) -1)*/msgbytes = msghdrs = msg_seq = max_msqid = used_queues = 0;msg_lock = NULL;return;2. 发送消息模块:static int real_msgsnd (int msqid, struct msgbuf *msgp, size_t
14、 msgsz, int msgflg)函数参数: msqid: 整型, 消息的序列号; msgp: 指向msgbuf结构的指针; msgsz: 消息的大小; msgflg: 消息的标志符。函数返回类型:若消息正确的放入消息队列,则返回0,否则返回各错误信息。函数功能:将msgp所指向的消息缓冲区的内容放入消息队列中,且将标志号设为msqid。其他调用可通过msqid访问消息队列。3. 接收消息模块;static int real_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg)函数参数:
15、 msqid: 整型, 消息的序列号; msgp: 指向msgbuf结构的指针; msgsz: 消息的大小; msgtyp: 消息的类型; msgflg: 消息的标志符。函数返回类型:若接收正确,返回接收到的消息字节数。否则,返回错误信息。函数功能:从消息队列中接收标示号为msqid,内容为msgp所指向的信息。4. 创建或获得消息的控制模块:asmlinkage int sys_msgget (key_t key, int msgflg)函数参数: key:代表访问通信资源的权限 msgflg:标志位。函数返回类型:整型函数功能:传递键值,标志位以及其他的参数,获得消息。5. 消息传递的控制
16、模块:asmlinkage int sys_msgctl (int msqid, int cmd, struct msqid_ds *buf)函数参数:msqid:消息序列号cmd:处理消息的命令buf:指向msqid_ds的指针函数返回类型:有关汇编连接的类型函数功能: 系统调用。处理各种有关消息处理的命令2.4 流程图本程序的流程图如图2所示msgquemsgid_dsmsgmsg msg_perms msg_next msg_next msg_first msg_type msg_last msg_spot msg_stime msg_ts message图:Linux消息队列recei
17、verreceiversendersender1.1 Struct msgqid_dsmsgmsgmsg 消息传递的示意图2.5 以实例说明运行过程#include #include #include #include #define MAX_LINE 80#define MY_MQ_ID 1233typedef struct long type; int tag; int * m; /download_arg_t *; /upload_arg_t *;MY_TYPE_T;int main( ) int msgid,ret; int b; /create the message queue w
18、ith the id MY_MQ_ID msgid=msgget( MY_MQ_ID,0666|IPC_CREAT ); if( msgid=0 ) printf( Created a Message Queue,message queue identifier is %dn,msgid ); /modify the size of message queue struct msqid_ds buf; ret=msgctl( msgid,IPC_STAT,&buf ); printf( The origianl size of queue is %dn,buf.msg_qbytes ); buf.msg_qbytes=1000; ret=msgctl( msgid,IPC_SET,&buf ); if( ret=0 ) printf( Size sucessfully changed for queue,message queue identifier is %dn,msgid ); /send a message b = 5; MY_TYPE_T myMessa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度联合承包大数据中心建设合同协议范本
- 2024年度文化艺术品授权合同
- 2024年度海鲜餐厅食材供应合同
- 二零二四年度设备购买与维护合同3篇
- 2024年度智能交通系统研发与集成合同
- 全新事业单位解除聘用合同协议书模板下载3篇
- 2024年度航天器研制发射合同
- 2024年度墙面装修工程安全防护协议
- 语法定语从句课件-高三英语一轮复习
- 护理学基础护理程序
- 小学四史教育主题班会教案
- 2023-2024学年辽宁省阜新市七年级(上)月考数学试卷(12月份)
- 黑龙江省齐齐哈尔市2023-2024学年九年级上学期期末语文试题
- 神经外科进修总结汇报
- 我的教育故事20篇
- 植物病虫害防治绿色防控
- 勿忘国耻吾辈自强班会
- 国家开放大学《人文英语3》章节测试参考答案
- -原料药的优良制造规范指南(ICH-Q7)学习与问答
- 志愿服务管理智慧树知到期末考试答案章节答案2024年山东青年政治学院
- 七年级上册《Module 4 Healthy food》课件
评论
0/150
提交评论