os课程实验指导书_第1页
os课程实验指导书_第2页
os课程实验指导书_第3页
os课程实验指导书_第4页
os课程实验指导书_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 操作系统实 验 指 导 适用专业: 计算机科学与技术 空间系 计算机专升本 前 言了解windows原理,并能使用系统函数等进行进程创建与撤、通信、调度,主存储器管理、文件结构、安全管理。为了使学生更好地理解和深刻地把握这些知识,并在此基础上,使学生掌握操作系统的基本概念、 基本原理、设计方法和实现技术, 具有初步分析实际操作系统的能力,设置了一定数量的实验为综合性、设计性实验。 实验一 : windows 控制台命令系统管理1实验目的(1) 掌握命令行窗口的显示设置。(2) 学会系统的基本配置。(3) 显示系统基本信息。、(4) 掌握系统配置管理。(5) 任务管理。2.实验工具 一台装有w

2、indowsxp或winddows2003的机器(这里默认是windowsxp).3.预备知识 cmd:启动windows命令窗口。 chcp:活动控制台代码页。 prompt:显示更改windows命令提示符 color:设置命令行窗口颜色。 title:命令行窗口标题。 date:显示或设置日期。 time:显示或设置系统时间。 w32tm:时间服务。 doskey:创建宏。 systeminfo:显示系统信息。 mem:显示内在分配。 tasklist:显示任务进程。 at:结束任务进程。命令的具体参数和使用方法参见本次实验参考资料部分。4.实验内容1) 进入windows命令行窗口执行

3、“开始”“运行”cmd2)设置活动代码页步骤一:输入命令chcp936.步骤二:输入命令ver,步骤三:输入命令chcp步骤四:输入命令ver步骤五:比较结果步骤一与步骤三显示的结果一样,说明在命令输入时,活动代码的页数可以不用输入。在显示版本的信息时,标点符号对符号无影响。、3) 显示更改windows命令提示符输入命令prompt$v$g,4) 改变windows命令行窗口的前景和背景色输入命令color fc5)改变命令行窗口的标题输入命令title ” windows命令行窗口”c:documents and settingsadministratorcolor fcc: docume

4、nts and settingsadministrator6)显示或设置系统日期?输入date7)显示或设置系统时间?输入命令time,8)显示当前时区设置输入命令w32tm/tz,9)创建宏输入命令doskey ls=dir/w,10)显示系统信息输入命令systeminfo |more11)显示内存分配输入命令mem12)命令tasklist:显示任务进程输入命令tasklist13)命令taskkill:结束任务进程输入命令taskkill5.实验提高1) 基本命令的使用 进入windows控制台窗口并为控制台窗口设置文字和背景颜色,改变控制台窗口的名称,显示系统日期和时间并为系统设置新

5、的时间和日期,改变windows命令行提示符,获得windows的版本号。 实验步骤如下所示。 步骤一:单击“开始”菜单,在“运行”窗口中输入cmd/t:04命令,单击“确定”按钮. 步骤二:在系统提示符下输入title“我的windows”控制台窗口命令,按enter健步骤三:改变系统日期,在系统提示符下输入date 2007/08/27命令按enter健;改变系统时间,在系统提示符下输入time 19:59:26.00命令按enter.健。输入不带参数的datet和 time命令就可以显示当前的日期和时间。步骤四:在系统提示符下输入prompt $ $,按enter.健改变当前系统提示符,

6、要还原成系统默认的提示符可以输入prompt $p $g.2) 宏命令的使用(1) 创建宏。 在系统提示符下依次输入下面几个命令:doskey ls = dirdoskey up = cd.doskey root =cd 利用多个命令定义宏,使用$t分隔命令,如下所示。 doskey myroot = cd$t cd”%userprofile%” 使用参数的宏: doskey mc = md $1 $tcd $1 /macros 和 /history命令行选项对于创建保存宏和命令的批处理程序非常有用,要存储所有当前的doskey宏,请输入doskey/macrosmacinit.要创建包含最近

7、使用命令的批处理程序tmp。pat,输入doskey/historytmpbat。(2) 使用宏。lsup rootmyrootmc pic要使用存储macinit中的宏,请输入doakey/macrofile=macint。3) 批处理文件的建立和使用批处理文件是一种命令文件,它将一组命令按照一定的顺序组合在一起用来完成一定的功能。批处理文件必须以bat为扩展名。批处理文件有两种,一种是系统启动时自动运行的(autoexec,bat),一种是需要用户输入命令名来运行的。批处理文件可以用任何文本编辑器来编辑,只要在保存文件时将其扩展名改为bat就可以了,简单的批处理文件可以用行编辑命令copy

8、 con完成。(1) 建立一个批处理文件macinit.bat。用来定义列宏。 步骤一:在提示符下输入copy con macinit.bat. 步骤二:输入以下几行命令. doskey ls=dir doskey up=cd. doskey root=cd 步骤三:按ctrlz健后按enter健. 步骤四:在健盘上输入macinit命令来执行macinit.bat.(2)建立一个批处理文件ct.bat,用来清理系统中的临时文件. 步骤一:打开写字板工具. 步骤二:输入以下几行命令: echo off echo正在清除系统垃圾文件,请稍等 del/f/s/q % systemdrive % *

9、.tmp del/f/s/q % systemdrive % *. mp del/f/s/q % systemdrive % *.log del/f/s/q % systemdrive % *.gid del/f/s/q % systemdrive % *.chk del/f/s/q % systemdrive % *.old del/f/s/q % systemdrive % recycled*. * del/f/s/q % windir % *.bak del/f/s/q % windir % prefetgch*.* rd/s/q % windir %gtemp & md % windi

10、r % temp del/f/s % userprofile % cookies *. * rel/f/s % userprofile % recent * . * echo 清除系统垃圾完成。 echo on 步骤三:保存文件改扩展名。 步骤四:运行ct.bat。4) 计划任务的建立计划任务命令可以让系统在规定的时刻自动完成预先定义好的一系列操作。在windows中,可以使用“控制面板”中的“任务计划”工具来安排任务,也可以使用at命令手动安排任务,这里练习如何使用at命令创建和取消计划任务。(1) 创建计划任务 在命令提示符下,输入netstart,然后按enter健显示当前运行的服务的列

11、表,如果“task scheduler”未显示在列表中,则请输入net start “task scheduler”。要想在午夜将“documents”文件夹中的所有文件复制到“mydocs”文件夹中:at 00:00 cmd/c copy c:documents* . * c:mydocs要想在每个工作日晚上11:00备份“products”服务器,请创建包含命令的批处理文件(例如 backup。bat),输入下面一行,然后按enter健安排该备份任务:atproducts 23:00/every:m,t,w,th,f backu(2)查看计划任务要查看本地计算机上的所有计划任务,请输入at

12、,然后按enter健。要查看名为”support”计算机上的所有计划任务,请输入atsupport,然后按enter健,要查看本地计算机上id为18的任务,请输入at 18,然后按enter健。(3)取消计划任务要取消在本地计算机上安排的所有任务,请输入at/delete,然后按enter健.要取消名为”myserver”的计算机上的id为8的任务,请输入atmyserver8/delete,然后按enter健。注意:在运行命令之前,at不会自动加载cmd.exe(命令解释程序).如果没有运行可执行文件(.exe),则在命令开头必须使用专门的方法加载cmd.exe.如at 00:00 cmd/

13、c dir.使用at的已经计划的命令作为后台程序运行。运行结果不会显示在计算机上.要将输出重定向到文件,可以使用重定向符号()。如果将输出重定向到文件,则不论是在命令行还是在批处理文件中使用at,都需要在重定向符号之前使用转义符()。例如,要重定向输出到output.text文件和,则要输入at 14:45cmd/cdirc:output.txt。实验二:winows文件操作命令1、 实验目的(1) 加深对文件,目录和文件系统等概念的理解。(2) 掌握windows文件系统的目录结构。(3) 掌握有关windows文件系统操作的常用命令。2、 实验工具一台装有windowsxp或windows

14、2003的机器(这里默认是windowsxp)。3、 预备知识1) 对文件操作的命令dir:查看文件。attrib:显示或更改文件属性。ren(rename):重命名文件名。 comp:比较两个或两套文件的内容。 copy:文件复制。 del(erase):文件删除。 move:将文件从一个目录移到另一个目录。2) 对目录操作的命令 md(mkdir):建立一个目录。 cd(chdir):改变当前的目录。 rd(rmdir):删除目录。 tree:显示驱动器或路径的目录结构。 详细内容参见本次实验参考资料部分。4、 基本实验以下命令均在命令窗口中进行。1) 显示目录文件和子目录命令dir输入命

15、令dir。2) 显示或更改文件属性attrib步骤一:输入命令attrib。步骤二:输入命令attrib+r+s pushd。步骤三:输入命令attrib。3)显示文件内容type步骤一:利用编辑工具(如edit)编辑文本,并以textl.txt为文件名保存。步骤二:输入命令type textl.txt。4)修改文件的名字ren步骤一:输入命令dir。步骤二:输入命令ren tgextl.txt c.txt。步骤三:输入命令dir。5)比较两个或两套文件的内容comp步骤一:输入命令type a.txt。步骤二:输入命令type b.txt。步骤三:输入命令comp a.txt b.txt。6

16、)文件复制copy步骤一:利用编辑工具编辑(如edit)两个文本,分别命名为a.txt 和b.txt并保存。步骤二:输入命令copy a.txt d.txt。7)文件的删除del步骤一:利用编辑工具(如edit)编辑文本,并以d.txt为文件名保存。步骤二:输入命令del d.txt。步骤三:输入命令dir。8)将文件从一个目录移到另一个目录move步骤一:输入命令dir。步骤二:利用编辑工具(如edit)编辑文本,并以d.txt为文件名保存。步骤三:输入命令move d.txt。步骤四:输入命令dir。9)创建子目录(文件夹)md步骤一:输入命令md subl。步骤二:输入命令dir/w。1

17、0)显示和改变当前的目录步骤一:输入命令cd。步骤二:输入命令cd步骤三:输入命令cd osex.11)删除目录rd.步骤一:进入命令行窗口。步骤二:输入命令rd subl(目录不为空不能删除)。步骤三:输入命令rd/s subl(强制删除不为空的目录)。步骤四:输入命令dri/w。12)显示目录结构tree步骤一:输入命令cd.步骤二:输入命令md osex。步骤三:输入命令cd osex。步骤四:输入命令md subl。步骤五:输入命令md sub2。步骤六:输入命令cd subl。步骤七:输入命令md sub1-1。步骤八:输入命令md sub1-2。步骤九:输入命令cd.。步骤十:输入

18、命令cd sub2。步骤十一:输入命令md sub2-1。步骤十二:输入命令md sub2-2。步骤十三:输入命令cd.。步骤十四:输入命令tree。5、 可选实验1) 文件管理在本实验中,将对文件和目录进行创建、更名、删除、移动等综合操作。在windows系统中文件名包括:文件名和扩展名两部分,文件名和扩展名之间用点(.)隔开。文件名由字母和数字组成,最长255个字符;扩展名通常由3个字符组成,但也有超过和小于3个字符的扩展名。文件名中的字母大小写不敏感,filel和 filel是同一个文件。在windows系统中扩展名通常代表某一特定的文件,例如,doc表示word文件、xls表示exce

19、l文件、txt表示文本文件、bat表示批处理文件,等等。目录就是人们通常说的文件夹,它的命名规则和文件一样,一般不用扩展名,但用了也不算错。步骤一:使用copy con来创建文件。在命令行状态下建立简单的文件可以使用copy con filename命令来完成,copy con建立的是纯文本文件。(1) 建立一个名字为filel的文件。(2) 看看文件的属性是什么。(3) 文件创建的日期和时间是什么?(4) 文件的大小是多少?运行cd命令,确定自己当前的工作目录。步骤二:利用dir命令显示当前工作目录的内容。步骤三:运行以下命令dir/?,看看dir带参数都有什么意义。步骤四:使用md命令建立

20、一个子目录mydir。步骤五:使用cd命令进入子目录mydir。步骤六:用dir命令显示mydir中的内容。步骤七:执行cd.命令看看当前的工作目录。步骤八:执行cd命令看看当前的工作目录。步骤九:执行cd”%windir%”命令看看当前的工作目录。步骤十:执行cd”%userprofile%命令看看当前的工作目录。2) 查看文件步骤一:利用cd命令,将工作目录改到自己的主目录上。步骤二:将工作目录改到自己的子目录mydir,然后运行命令:datefilel将当前日期和时间存放到新建文件file中。步骤三:使用type命令查看filel文件的内容。步骤四:利用help命令显示date命令的用法

21、help date。步骤五:将date命令的用法附加到文件filel的后面,help datefilel。步骤六:利用type命令显示文件filel的内容。步骤七:利用dir/t:c filel命令列出文件filel的创建时间。步骤八:运行move filel.命令。步骤九:运行cd,dir filel/s看看文件filel被移动到哪里了。步骤十:使用dir/s查找文件。步骤十一:进入filel文件所在的目录中。步骤十二:用attrib filel看看filel文件的属性。在windows文件有四种属性,其中r代表只读属性,a代表存档属性,h代表隐含性,s代表系统属性。步骤十三:使用attri

22、b+h filel命令改变filel的属性。步骤十四:看看执行dir filel命令后的提示。步骤十五:运行attrib-h+r filel命令,然后用attrib看看filel文件的属性。步骤十六:看看执行del filel命令后的提示。步骤十七:运行find/c/i“b”filel看看b字符在filel文件中哪一行。实验3:windows基本进程管理1、 实验目的 通过观察任务管理器,来观察各个进程的动态信息。2、 实验工具(1) 一台windowsxp操作系统的计算机。(2) 计算机装有microsoft visual studio c+6.0专业版或企业版。3、 预备知识 任务管理器,

23、了解用户计算机上正在运行的程序和进程的相关信息。 windows环境中的编程。相关内容参见本次实验参考资料部分。4、 基本实验1) 观察任务管理器步骤一:进入windowsxp。步骤二:按ctrl+alt+delete(或按ctrl+shift+esc)键都可以调出任务管理器。步骤三:单击“查看”“选择列”选项,可以看到一些选项,这里,可以查看每个进程的pid,cpu使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到cpu的使用情况、内存的使用情况。2) 通过命令观察进程情况、步骤一:单击“

24、开始”“运行”选项,输入cmd“命令提示符”下。步骤二:输入tasklist。 步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。3) 通过命令来关闭一个进程步骤一:单击“开始”“运行”选项,输入cmd“命令提示符”下。步骤二:输入tasklist后回车执行。步骤三:继续输入taskkill/pid 208/t5、 实验编程 进行一个简单的windows的图形用户接口(gui)编程。 步骤一:进入windowsxp。 步骤二:进入microsoft visual studio c+6.0。 步骤三:在菜单栏中单击“文件”“新建”“文件”c+source file,选择路径(如

25、d:1.cpp),并命名为1.cpp。 步骤四:将下面的程序源代码输入。 步骤五:单击windows系统的“开始”“运行”选项,输入cmd。 步骤六:依次输入命令为 cd d:/ 这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方 cl 1.cpp/ 对这是源程序进行编程 步骤七:若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。 源代码如下: # include # include /告诉连接器与包括 messagebox api函数的 user32库进行连接 # pragma comment(lib,”user32.lib”)in

26、t apientry winmain(hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int ncmdshow) messagebox( null, /没有父窗口 “hello windows xp”, / 消息框中的文本显示 hello windows xp “提示”, /消息框的标题 mb ok); / 其中只有一个ok按钮 /返回0以便通知系统不进入消息循环 return 0;6、扩展实验 1、获得和使用进程的句柄 步骤一:进入windowsxp。步骤二:microsoft visual studio c+6.

27、0。步骤三:在菜单栏中单击“文件”“新建”“文件”c+source file,选择路径(如:d:2.cpp。步骤四:将下面的程序源代码输入。步骤五:单击windows 系统的“开始”“运行”选项,输入cmd。步骤六:依次输入命令为: cdd:/这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方cl 2.cpp/对这是源程序进行编译步骤七:若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe, 程序源代码如下: #include #include #include /确定自己的优先权的简单应用程序 void main() /从当前过程中提取句柄 handle

28、 hprocessthis=:getcurrentprocess(); /请求内核提供该过程所属的优先权类dword dwpriority=:getpriorityclass(hprocessthis);/发出消息,为用户描述该类std:cout“current process priority:”;switch(dwpriority) case high priority class: std:cont”high”; break; case normal priority class: std:coutg”normal”, break; case idle priority class; s

29、td:cout”idle”; break; case realtime priority class: std:cout”realtime”; break; default: std:cout”; break; std:coutstd:endl; getchar();2)利用句柄来获得进程的详细信息 步骤一:进入进入windowsxp。步骤二:microsoft visual studio c+6.0。步骤三:在菜单栏中单击“文件”“新建”“文件”c+source file,选择路径(如d:3.cpp),并命名为3.cpp。步骤四:将下面的程序源代码输入。步骤五:单击windows系统的“开始

30、”“运行”选项,输入cmd。 步骤六:依次输入命令为: cd d:/这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方 cl 3.cpp/对这是源程序进行编译 步骤七:若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”, 程序源代码如下: #include #include #include #include /当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法 dword getkernelmodepercentage(const filetime& ftkernel, const filetime& user)

31、/将filetime结构转化为64位整数ulonglong qwkernel = (ulonglong)ftkernel.dwhighdatetime) 32) + ftkernel.dwlowdatetime;ulonglong qwuser = (ulonglong)ftuser.dwhighdatetime) 32) + ftuser.dwlowdatetime;/将消耗时间相加,然后计算消耗在内模式下的时间百分比ulonglong qwtotal = qwkernel + qwuser;dword dwpct = (dword)(ulonglong)100 * qwkernel)/qw

32、total);return(dwpct);/以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序void main()/对当前系统中运行的过程拍取“快照”handle hsnapshot = :createtoolhelp32snapshot( th32cs snapprocess, /提取当前过程 0); /如果是当前过程,就将其忽略/初始化过程入口processentry32 pe;:zeromemory(&pe,sizeof(pe);pe.dwsize = sizeof(pe)bool bmore = :process32first(hsnapshot,&pe);whi

33、le(bmore) /打开用于读取的过程hndle hprocess = :openprocess( process query information, /指明要得到信息 false, /不必继承这一句柄 pe.th32processid); /要打开的过程if(hprocess! = null)/找出进程的时间filetime ftcreation, ftkernelmode,ftusermode,ftexit;:;getprocesstimes( hprocess, /所感兴趣的进程 &ftcreation, /进程的启动时间 &ftexit, /结束时间(如果有的话) &ftkerne

34、lmlde, /在内核模式下消耗的时间 &ftusermode);表 /在用户模式下消耗的时间/计算内核模式消耗的时间百分比dword dwpctkernel = :getkernelmodepercentage( ftkernelmode, /在内核模式上消耗的时间 ftusermode); /在用户模式下消耗的时间/向用户显示进程的某些信息cout ”process id:” pe.th32processid ”,exe file:” pe.szexefile “, % in kernel mode:” dwpctkernel endl; /消除句柄 :closehandle(hproce

35、ss);/转向下一个进程bmore = :process32next(hsnapshot,&pe);getchar();实验4 进程控制1、 实验目的(1) 通过对windowsxp进行编程,来熟悉和了解系统。(2) 通过分析程序,来了解进程的创建、终止。2、 实验工具(1) 一台windowsxp操作系统的计算机。(2) 计算机装有microsoft visual studio c+6.0专业版或企业版。3、 预备知识(3) createprocess()调用:创建一个进程。(4) exitprocess()调用:终止一个进程。4、实验编程(1)编程一 利用createprocess()函数

36、创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include # include int main(void) startupinfo si; process information pi; zeromemory(&si,sizeof(si); si.cb=sizeof(si); zeromemory(&pi,sizeof(pi); if(!createprocess(null, “c: windowssystem32 mspaint.exe”, null, null, false, 0, null, null, &si,&pi) fpr

37、intf(stderr,”creat process failed”);return 1;waitforsingleobject(pi.hprocess,infinite);printf(“child complete”);closehandle(pi.hprocess);closehandle(pi hthread); 在“命令提示符”窗口运行cl命令产生可执行程序4-1.exe: c: cl 4-1.cpp 实验任务:写出程序的运行结果。 4正在运行的进程 (2)、编程二 下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的api函数getpro

38、cessversion()与getversionex()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include/利用进程和操作系统的版本信息的简单示例void main() /提取这个进程的id号 dword dwidthis=:getcurrentprocessid(); /获得这一进程和报告所需的版本,也可以发送0以便指明这一进程dword dwverreq=:getprocessversion(dwidthis);word wmajorreq=:(word)dwverreq16);word wminorreq=:(word)dwverre

39、q & oxffff);std:cout ”process id:” dwidthis ”,requires os:” wmajorreq wminorreq std:endl;/设置版本信息的数据结构,以便保存操作系统的版本信息osversioninfoex osvix;:zeromemory(&osvix,sizeof(osvix);osvix.dwosversioninfosize=sizeof(osvix);/提取版本信息和报告:getversionex(reinterpret cast(&osvix);std:cout ”running on os:” osvix.dwmajorve

40、rsion ”.” osvix.dwminorversion =5 /改变优先级:serpriorityclass(:getcurrentprocess() /利用这一进程 high priority class); /改变为high/报告给用户std:cout ”task manager should now now indicate this” “process is high priority.” std:endl;实验参考:在visual c+窗口的工具栏中单击“打开”按钮,在“打开“对话框中找到并打开4-2.cpp源程序。单击build菜单中的compile 4-2.cpp命令,再单

41、击“是”按钮确认。系统对4-2.cpp源程序进行编译。编译完成后,单击build菜单中的build 4-2.exe命令,建立4-2.exe可执行文件。在工具栏单击execute program(执行程序)按钮,执行4-2.exe程序。实验任务:写出程序运行后的以下几项结果。当前pid信息 。当前操作系统版本 。系统提示信息 。5、终止进程(3)编程三 下面给出了一个终止进程的应用程序(文件名为4-3.cpp),它先创建一个子进程,然后命令它发出“自杀弹”互斥体去终止自身的运行。阅读该程序并完成实验任务。 #include #include #include satic lpctstr g sz

42、mutexname=”w2kdg.procterm.mutex.suicide”;/创建当前进程的克隆进程的简单方法void startclone() /提取当前可执行文件的文件名 tchar szfilenamemax path :getmodulefilename(null,szfilename,max path); /格式化用于子进程的命令行,指明它是一个exe文件和子进程 tchar szcmdlinemax path; :sprintf(szcmdline,”%s”child”,szfilename); /子进程的启动信息结构 startupinfo si; :zeromemory(

43、reinterpret cast(&si),sizeof(si); si.cb=sizeof(si); /应当是此结构的大小 /返回的用于子进程的进程信息 process information pi; /用同样的可执行文件名和命令行创建进程,并指明它是一个子进程 bool bcreateok=:createprocess( szfilename, /产生的应用程序名称(本exe文件) szcmdline, /告诉人们这是一个子进程的标志 null, /用于进程的默认的安全性 null, /用于线程的默认安全性 false, /不继承句柄 create new console, /创建新窗口,

44、使输出更直观 null, /新环境 null, /当前目录 &si, /启动信息结构 &pi); /返回的进程的信息 /释放指向子进程的引用 if(bcreateok) :closehandle(pi.hprocess); :closehandle(pi.hthread); void parent() /创建“自杀”互斥程序体 handle hmutexsuicide=:creatgemutex( null, /默认的安全性 true, /最初拥有的 g szmutexname); /为其命名 if(hmutexsuicide !=null) /创建子进程 std:cout ”creating

45、 the child process.” std : endl; :startclone(); /暂停 :sleep(5000); /指令子进程“杀”掉自身 std:cout ”telling the child process to quit.” std:endl; :releasemutex(hmutexsuicide); /消除句柄 :closehandle(hmutexsuicide); void child() /打开“自杀”互斥体 handle hmutexsuicide=:openmutex( synchronize, /打开用于同步 false, /不需要向下传递 g szmu

46、texname); /名称 if ( hmutexsuicide !=null) /报告正在等待指令 std:cout ”child waiting for suicide instructions.” std:endl; :waitforsingleobject(hmutexsuicide,infinite); /报告准备好终止,消除句柄 std:cout ”child quiting.” 1 & & :strcmp(argv1,”child”)=0) child(); else parent(); return 0; 分析:程序4-3.cpp说明了一个进程从“生”到“死”的整个一生,第一次执行时,它创建一个子进程,其行为如同“父亲”。在创建子进程之前,先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。当创建子进程时,就打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用releasemutex()api发出“死亡”信号。然后用sleep()api调用来模拟父进程处理其他工作,等完成时,指令子进程终止。当调用exitprocess()时要小心,进程中的所有线程都被立刻通知停止。在设计应用程序时,必须让主线程在正常的c+运由期关闭(这是由编译器提供默认行为)之后来调用这一函数。当它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论