操作系统实验指导书(xx525更新).doc_第1页
操作系统实验指导书(xx525更新).doc_第2页
操作系统实验指导书(xx525更新).doc_第3页
操作系统实验指导书(xx525更新).doc_第4页
操作系统实验指导书(xx525更新).doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

操作系统实验指导书(xx525更新) 实验一初识Linux及Vi器的使用 一、预备知识1who命令who命令的选项选项-count快速who命令,仅显示用户名和用户数-heading在每一列上显示列标题-help显示使用方法消息2date命令在屏幕上显示当前的日期和时间。 日期和时间是由系统管理员设置的,用户不能修改。 3.cal命令显示指定年份的日历表。 如果同时指定年和月,则只显示指定月的日历表。 年和月都是由命令参数指定的。 默认参数为当前月。 如显示xx年11月的日历$cal11xx屏幕显示NovemberxxS MTu WTh FS123456789101112131415161718192021222324252627282930$_4vi器vi是大多数UNIX操作系统都支持的全屏文本器,它具有字处理程序的灵活性和简单易用的特性。 vi的工作模式a.命令模式vi初启动时时进入命令模式。 在命令模式下,键的输入(用户按下的任何键或键序列)不会在屏幕上显示,只会被解释执行。 用户按键可以删除几行、查找某个字、在屏幕上移动光标及执行一些其他有用的操作。 在命令模式下,一些命令以冒号()、斜杠(/)或问号(?)开头。 用户输入的命令显示在vi器屏幕的最后一行上。 按回车键表示结束命令行。 b.文本输入模式在文本输入模式下,键盘成了用户的打字机。 Vi显示用户的输入。 按键不被解释为命令执行,只是作为文本写入到用户的文件中。 c.状态行屏幕底部的一行,通常为第24行,vi在该行上反馈操作的结果。 错误信息或其他一些信息会在状态行上显示出来,vi还会在第24行上显示那些以冒号、斜杠或问号开头的命令。 (1)进入vi器先输入vi,按空格键,再输入文件名,然后按回车。 操作 (2)移动光标键:键功能h或把光标向左移动一格j或把光标向下移动一格k或把光标向上移动一格l或把光标向右移动一格 (3)文本输入模式切换到文本输入模式的命令键功能命令键i在光标左侧输入正文在光标所在行的开头输入正文I a在光标右侧输入正文在光标所在行的末尾输入正文A o在光标所在行的下一行增添新行,且光标位于新行的开头在光标所在行的上一行增添新行,且光标位于新行的开头O (4)命令模式当启动vi器时,vi进入命令模式。 在文本输入模式下按Esc键就会切换到命令模式。 如果在命令模式下按Esc键,vi仍处于命令模式。 文本修改键命令键x删除光标位置指定的字符功能dd删除光标所在行从光标所在行开始删除#行#dd#x表示删除光标所在位置的“后面”#个字符u撤销最近的修改撤销对当前行上做的所有修改替换光标位置上的一个字符U rR替换从光标位置开始的字符,同时改变vi到文本输入模式重复上一次的修改 (5)退出保存退出在命令模式下输入:wq不保存退出在命令模式下输入:q! 二、操作步骤开始第一次登录前,先用几分钟的时间确定系统的下列信息找到你的登录名(用户名)。 如果系统要求口令,找到你的口令 (1234)。 再在打开终端等待“login:”提示。 1用自己的用户名和口令登录到系统。 注意屏幕上出现的信息。 2用who命令查看当前有谁登录到了系统。 .3用带选项的who命令查看当前登录到系统的用户总数和系统启动时间。 4用date命令查看自己的生日是星期几。 5查看xx年的日历。 6用vi器创建一个文件,名为Chapter4,输入如下文本后保存。 The vihistory The vi editorwas developedat theUniversity ofCalifornia,Berkeley aspart of the Berkeleyunix system.7重新打开文件,增加一些文本,使文件如下The vihistory The vi editorwas developedat theUniversity ofCalifornia,Berkeley aspart of the Berkeleyunix system.At thebeginning thevi editorwas partof anothereditor Thevi partoftheex editorwas oftenused anddecame very.This popularityforced thedevelopers toe upwith aseparate vi editor.now thevieditor is independentoftheex editorand isavailable onmost ofthe UNIXoperating system.Thevieditor isa goodeditor foreveryday editingjobs.8再次保存文件9再次打开文件,在文本末尾一行改为Thevieditorisa goodeditor foreveryday editingjobs althoughit couldbe moreuser friendly.10将光标放到文件首,并删除5行。 然后撤销删除操作11将光标放到第二行行首,并删除10个字符。 然后撤销删除操作。 12用r替换光标位置的字符,然后撤销替换操作。 13将单词developers替换为creators,然后撤销该操作。 14用wq命令保存文件。 15退出系统$Ctrl-d实验二Linux基本环境Linux常用命令简介 一、LINUX命令格式命令选项处理对象例ls-la mydir注意 (1)命令一般是小写字串。 注意大小写有别 (2)选项通常以减号(-)再加上一个或数个字符表示,用来选择一个命令的不同操作 (3)同一行可有数个命令,命令间应以分号隔开 (4)命令后加上&可使该命令后台(background)执行 二、常用命令 1、目录操作和DOS相似,UNIX采用树型目录管理结构,由根目录(/)开始一层层将子目录建下去,各子目录以/隔开。 用户login后,工作目录的位置称为home directory,由系统管理员设定。 符号代表自己的home directory,例如/myfile是指自己home目录下myfile这个文件。 UNIX的通配符有三种*和?用法与DOS相同,-代表区间内的任一字符,如test0-5即代表test0,test1,test5的集合。 (1)显示目录文件ls执行格式ls-atFlgRname(name可为文件或目录名称)例ls显示出当前目录下的文件ls-a显示出包含隐藏文件的所有文件ls-t按照文件最后修改时间显示文件ls-F显示出当前目录下的文件及其类型ls-l显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称每个Linux文件具有四种访问权限可读(r)、可写(w)、可执行(x)和无权限(-)。 利用ls-l命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为准。 第一个字段由10个字符组成,如下-rwxr-xr-x第一位表示文件类型,-表示文件,d表示目录2-4位表示文件所有者的权限,u权限5-7位表示文件所有者所属组成员的权限,g权限8-10位表示所有者所属组之外的用户的权限,o权限2-10位的权限总和有时称为a权限以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。 ls-lg同上ls-R显示出该目录及其子目录下的文件注:ls与其它命令搭配使用可以生出很多技巧(最简单的如ls-l|more),更多用法请输入ls-help查看,其它命令的更多用法请输入命令名-help查看. (2)建新目录mkdir执行格式mkdir directory-name例mkdir dir1(新建一名为dir1的目录) (3)删除目录rmdir执行格式rmdir directory-name或rm directory-name例rmdir dir1删除目录dir1,但它必须是空目录,否则无法删除rm-r dir1删除目录dir1及其下所有文件及子目录rm-rf dir1不管是否空目录,统统删除,而且不给出提示,使用时要小心 (4)改变工作目录位置cd执行格式cdname例cd改变目录位置至用户login时的working directorycd dir1改变目录位置,至dir1目录cduser改变目录位置,至用户的working directorycd.改变目录位置,至当前目录的上层目录cd./user改变目录位置,至上一级目录下的user目录cd/dir-name1/dir-name2改变目录位置,至绝对路径(Full path) (5)显示当前所在目录pwd执行格式pwd (6)查看目录大小du执行格式du-sdirectory例du dir1显示目录dir1及其子目录容量(以kb为单位)du-s dir1显示目录dir1的总容量 (7)显示环境变量echo$HOME显示家目录echo$PATH显示可执行文件搜索路径env显示所有环境变量(可能很多,最好用env|more,env|grep PATH等) (8)修改环境变量,在bash下用export,如export PATH=$PATH:/usr/local/bin想知道export的具体用法,可以用shell的help命令help export 2、文件操作 (1)查看文件(可以是二进制的)内容cat执行格式cat filename或more filename或cat filename|more例cat file1以连续显示方式,查看文件file1的内容more file1或cat file1|more以分页方式查看文件的内容 (2)删除文件rm执行格式rm filename例rm file?rm f* (3)复制文件cp执行格式cp-rsource destination例cp file1file2将file1复制成file2cp file1dir1将file1复制到目录dir1cp/tmp/file1将file1复制到当前目录cp/tmp/file1file2将file1复制到当前目录名为file2cpr dir1dir2(recursive copy)复制整个目录。 (4)移动或更改文件、目录名称mv执行格式mv sourcedestination例mv file1file2将文件file1,更名为file2mv file1dir1将文件file1,移到目录dir1下mv dir1dir2 (5)比较文件(可以是二进制的)或目录的内容diff执行格式diff-rname1name2(name 1、name2同为文件或目录)例diff file1file2比较file1与file2的不同处diff-r dir1dir2比较dir1与dir2的不同处 (6)文件中字符串的查找grep执行格式grep stringfile例grep abcfile1查找并列出串abc所在的整行文字 (7)文件或命令的路径寻找执行格式一whereis mand显示命令的路径执行格式二which mand显示路径及使用者所定义的别名执行格式三whatis mand显示命令的功能摘要执行格式四find search-path-name filename-print搜寻指定路径下某文件的路径执行格式五locate filename根据系统预先生成的文件/目录数据库(/var/lib/slocate/slocate.db)查找匹配的文件/目录,查找速度很快,如果有刚进行的文件改变而系统未到执行定时更新数据库的时间,可以打入updatedb命令手动更新. (8)建立文件或目录的链接ln例:ln sourcetarget1建立source文件(已存在)的硬链接,命名为target1ln-s sourcetarget2建立source文件的符号链接,命名为target 23、系统询问与权限口令 (1)查看系统中的使用者执行格式who (2)查看username执行格式who amI查看自己的username (4)文件属性的设置chmod改变文件或目录的读、写、执行的允许权执行格式chmod-Rmode name其中-R为递归处理,将指定目录下所有文件及子目录一并处理mode为3-8位数字,是文件/目录读、写、执行允许权的缩写(r:read,数字代号为4w:write,数字代号为2x:execute,数字代号为1)mode rwx rwxrwxuser groupother缩写(u)(g)(o)例chmod755dir1将目录dir1设定成任何人皆有读取及执行的权利,但只有拥有者可作写修改。 其中7=4+2+1,5=4+1chmod700file1将file1设为拥有者可以读、写和执行chmod u+x file2将file2,增加拥有者可执行的权利chmod g+x file3将file3,增加组使用者可执行的权利chmod o-r file4将file4,除去其它使用者可读取的权利 (6)检查用户所在组名称groups执行格式groups (7)改变文件或目录的组拥有权chgrp执行格式chgrp-Rgroupname name例chgrp vlsifile1将文件file1改为vlsi组所有chgrp-R imagedir1将目录dir1及其下所有文件和子目录,改为image群组 (8)改变文件或目录的最后修改时间touch执行格式touch name 4、进程操作 (1)查看系统目前的进程ps执行格式ps-aux例ps或ps-x查看系统中属于自己的process ps-au查看系统中所有使用者的process ps-aux查看系统中包含系统内部及所有使用者的process ps-aux|grep apache找出系统中运行的所有名称中带有apache串的process (2)查看正在background中执行的process执行格式jobs (3)结束或终止进程kill执行格式kill-9PID(PID为利用ps命令所查出的process ID)例kill456或kill-9456终止process ID为456的process (4)后台(background)执行process mand的命令执行格式mand&(在命令后加上&)例g file1&在后台编译file1.c注意按下Z,暂停正在执行的process。 键入”bg”,将所暂停的process置入background中继续执行。 例g file1&Z stoppedbg (5)结束或终止在background中的进程kill执行格式kill%n例kill%1终止在background中的第一个job kill%2终止在background中的第二个job 四、用cat命令查看/proc动态文件系统目录下的文件,辨识其中的系统信息.例如:cat interrupts列出当前中断占用情况cat ioports列出设备的硬件IO占用情况cat pci列出pci设备的情况LINUX下C语言使用、编译与调试实验 一、C语言使用简介LINUX中包含了很多软件开发工具。 它们中的很多是用于C和C+应用程序开发的。 C是一种能在UNIX的早期就被广泛使用的通用编程语言。 它最早是由Bell实验室的Dennis Ritchie为了UNIX的辅助开发而写的,从此C就成为世界上使用最广泛的计算机语言。 C能在编程领域里得到如此广泛支持的原因有 (1)它是一种非常通用的语言,并且它的语法和函数库在不同的平台上都是统一的,对开发者非常有吸引力; (2)用C写的程序执行速度很快; (3)C是所有版本UNIX上的系统语言; 二、文件器vi vi是在UNIX上被广泛使用的中英文软件。 vi是visual editor的缩写,是UNIX提供给用户的一个窗口化环境。 进入vi,直接执行vi程序即可。 例$vi test.c 三、GNU C编译器LINUX上可用的C编译器是GNU C编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。 LINUX上的GNU C编译器(GCC)是一个全功能的ANCI C兼容编译器,而一般UNIX(如SCO UNIX)用的编译器是CC。 下面介绍GCC和一些GCC编译器最常用的选项。 1、使用GCC通常后跟一些选项和文件名来使用GCC编译器。 GCC命令的基本用法如下goptionsfilenames命令行选项指定的编译过程中的具体操作 2、GCC常用选项GCC有超过100个的编译选项可用,这些选项中的许多可能永远都不会用到,但一些主要的选项将会频繁使用。 很多的GCC选项包括一个以上的字符,因此必须为每个选项指定各自的连字符,并且就像大多数LINUX命令一样不能在一个单独的连字符后跟一组选项。 例如,下面的命令是不同的g-p-g test.c g-pg test.c第一条命令告诉GCC编译test.c时为prof命令建立剖析(profile)信息并且把调试信息加入到可执行文件里。 第二条命令告诉GCC只为gprof命令建立剖析信息。 当不用任何选项编译一个程序时,GCC将建立(假定编译成功)一个名为a.out的可执行文件。 例如,g test.c编译成功后,当前目录下就产生了一个a.out文件。 也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。 例如go countcount.c此时得到的可执行文件就不再是a.out,而是count。 GCC也可以指定编译器处理步骤多少。 -c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接步骤。 这个选项使用得非常频繁因为它编译多个C程序时速度更快且更易于管理。 默认时GCC建立的目标代码文件有一个.o的扩展名。 3、执行文件格式./可执行文件名例./a.out./count 四、参考程序#includemain()printf(Hello,world!n);实验三简单shell编程 一、实验目的1.了解UNIX shell的作用和主要分类。 2.了解Bourne shell(简称sh)的一般语法规则。 3.能编写简单的shell程序。 二、实验预备知识Shell是UNIX系统中一个重要的层次,它是用户与系统交互作用的界面。 在以上介绍UNIX命令时,Shell都作为命令解释程序出现它接收用户打入的命令,进行分析,创建子进程实现命令所规定的功能,等子进程终止工作后,发出提示符。 这是Shell最常见的使用方式。 UNIX Shell除了作为命令解释程序以外,还是一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if,case,while,for等语句,有自己的语法结构。 利用Shell程序设计语言可以编写出功能很强、但代码简单的程序,特别是它把相关的UNIX命令有机地组合在一起,可大大提高编程的效率,充分利用UNIX系统的开放性能,设计出适合自己要求的命令。 三、实验内容(一)Shell脚本的建立和执行Shell程序可以存放在文件中,这种被Shell解释执行的命令文件称为Shell脚本(Shellscript),也称做Shell文件或者Shell过程。 Shell脚本可以包含任意从键盘输入的UNIX命令。 1.Shell脚本的建立建立Shell脚本的方法同建立普通文本文件的方法相同,利用器(如vi)进行程序录入和加工。 例如,要建立一个名为ex1的Shell的脚本,可以在提示符后打入命令$vi ex1例2-1在提示符后打入命令$vi ex1,键入由三条简单命令组成的shell程序,并保存退出。 $cat ex1-用cat命令列出ex1文件的内容。 date pwd显示当前目录cd.到上级目录执行这个shell程序时,依次执行其中各条命令先显示出日期,接着显示当前工作目录,最后把工作目录改到当前目录的父目录。 2.执行Shell脚本的方式执行Shell脚本的方式基本上有三种 (1)输入定向到Shell这种方式是用输入重定向方式让Shell从给定文件中读入命令行并进行相应处理。 其一般形式是$sh (2)以脚本名作为Shell参数其一般形式是$sh脚本名参数例如,$sh ex1/home/jsj001 (3)将Shell脚本改为有执行权限的文件由正文器(如vi)建立的Shell脚本,用户通常是不能直接执行的,需要利用命令chmod将它改为有执行权限。 例如$chmod a+x ex2Shell变量的定义及其使用。 Shell有两种变量环境变量和临时变量。 在Shell脚本中临时变量又分为两类用户定义的变量和位置参数。 1.用户定义的变量用户定义的变量是最普遍的Shell变量,变量名是以字母或下化线打头的字母、数字和下线符序列,并且大小写字母意义不同。 变量名的长度不受限制。 定义变量并赋值的一般形式是变量名=字符串例如,myfile=/usr/meng/ff/m1.c在程序中使用变量的值时,要在变量名前面加上一个符号“$”。 这个符号告诉Shell,要读取该变量的值。 (1)定义并显示变量的值$dir=/usr/mengqc/file1$echo$dir/usr/mengqc/file1$echo dirdir$salutation=7+5$echo$dalutation7+5$today=Sunday$echo$today Sunday$str=Hapy NewYear!$echoWish You$strWish YouHappy NewYear!注意,如果字符串里包含着空格,就必须用引号把它们括起来。 还要注意的是等号两边不能有空格。 (2)read命令作为交互式输入手段,可以利用read命令由标准输入(即键盘)上读取数据,然后赋给指定的变量。 其一般格式是read变量1变量2.例如$read name-输入read命令mengqc-输入name的值$echoYour Nameis$name.Your Nameis mengqc-显示输出的结果$read ab c-read命令有三个参数crtvu edu-输入三个字符串,中间以空格隔开$echoEmail:$a.$c.$bEmail:crtvu.-显示输出结果利用read命令可交互式的为变量赋值。 输入数据时,数据间以空格或制表符作为分隔符。 注意以下情况*若变量个数与给定数据个数相同,则依次对应赋值,如上面例子所示。 *若变量数少于数据个数,则从左至右依次给变量赋值,而最后一个变量取得所有余下数据的值。 *若变量个数多余给定数据个数,则从左到右依次给变量赋值,后面的变量没有输入数据与之对应时,其值就为空串。 这三种情况,大家分别试一下。 2.位置参数执行Shell脚本时可以使用参数。 由出现命令行上的位置确定的参数称做位置参数。 在sh中总共有十个位置参数,其对应的名称依次是$0,$1,$2,.$9。 其中$0始终表示命令名或Shell脚本名,对于一个命令行,必然有命令名,也就必定有$0;而其它位置参数依据实际需求,可有可无。 例2-3位置参数的作用。 (1)在你的计算机上建立以下三个文件(设建立在目录/home/username之下,其中username表示你的登陆名,我们的用户名是syh)文件m1.c:#includemain()printf(Beginn);文件m2.c:#includemain()printf(OK!n);文件ex3:报告显示这两个文件用了多少行#ex3:shell scriptto binefiles andcount linescat$1$2$3$4$5$6$7$8$9|wc-l#end (2)将ex3改为具有执行权限$chmod+x ex3 (3)利用env命令查看在环境变量PATH中是否包含你的当前工作目录(即/home/username)。 如果没有包含在其中,则利用以下语句改变PATH的值$PATH=$PATH:/home/username (4)执行脚本ex3:$ex3m1.c m2.c记录其运行结果例2-4用set设置位置参数值。 (1)在你的工作目录中以下脚本文件ex4:#ex4:shell scriptto binefiles andcount lines#using mandset toset positionalparameters setm1.c m2.c echo$1echo$2echo$3cat$1$2$3|wc-l#end (2)将ex4改为具有执行权限$chmod+x ex4 (3)执行脚本ex4:$ex4m1.c m2.c10例2-5利用位置参数给定变量赋值。 (1)建立脚本ex5,如下所示n1=$1n2=$2n3=$3cat$n1$n2$n3|wc-l (2)将ex5改为具有执行权限$chmod+x ex5 (3)执行脚本ex5:$ex5m1.c m2.c10(三)SHELL中的特殊字符1.通配符通常的通配符有三种*星号,它匹配任意字符的0次或多次出现。 但注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。 ?问号,它匹配任意一个字符。 一对方括号,其中有一个字符组。 其作用是匹配该字符组所限定的任意一个字符。 应该注意字符*和?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。 !叹号,若它紧跟在一对方括号的左方括号之后,则表示不在一对方括号中所列出的字符。 2.引号在SHELL中引号分为三种单引号、双引号、和倒引号。 (1)双引号由双引号括起来的字符,除$、倒引号和反斜线()仍保留其功能外,其余字符通常作为普通字符对待。 例2-81.建立以下文件ex8echocurrent directoryispwdechohome directoryis$HOMEechofile*.?echodirectory$HOME2.执行ex8$sh ex8 (2)单引号由单引号括起来的字符都作为普通字符出现。 (3)倒引号例如$today=date$echo Todayis$today Todayis ThuMay04105620CST2000$又如$users=who|wc-l$echo Thenumber ofusers is$users Thenumber ofusers is5$ (4)反斜线转义字符,若想在字符串中使用反斜线本身,则必须采用()的形式,其中第一个反斜线作为转义字符,而把第二个反斜线变为普通字符。 例2-9$!/bin/sh myvar=Hi thereecho$myvar echo$myvarecho$myvarecho$myvar echoEnter sometext readmyvar echo$myvarnow equals$myvarexit0记录运行结果实验四Linux进程的创建与控制一实验目的1.加强对进程概念的理解,明确进程和程序的区别。 2.进一步认识并发执行的实质3.分析进程竞争资源的现象,学习解决进程互斥的方法。 二、实验准备1.阅读Linux的fork.c源码文件,分析进程的创建过程。 三、实验内容1进程的家族关系在主程序中用3个fork()调用,最后输出一个字符或字符串,运行这个简单的程序,观察并分析运行结果。 2.进程的创建编写一段程序,使用系统调用fork()创建两个子进程。 当此程序运行时,在系统中有一个父进程和两个子进程活动。 让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。 试观察记录屏幕上的显示结果,并分析原因。 3.进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 四、实验源程序清单1.进程的家族关系#includemain()fork();fork();fork();printf(“s”);记录运行结果。 分析创建进程系统调用fork(),在创建子进程时,子进程继承父进程的进程表项,并将其父进程的上下文静态部分拷贝到子进程上下文中。 执行第一个fork()时,进程A创建了进程B;执行第二个fork()时,进程A创建了进程C,进程B创建了进程D;执行第三个fork()时,进程A创建了进程E,进程B创建了进程F,进程C创建了进程G,进程D创建了进程H。 因此会输出8个s. 2、进程的创建#includemain()int p1,p2;while(p1=fork()=-1);if(p1=0)putchar(b);elsewhile(p2=fork()=-1);if(p2=0)putchar(c);else putchar(a);bca(有时会出现bac)分析从进程执行并发来看,输出bac,acb等情况都有可能。 原因fork()创建进程所需的时间多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了“b”,而进程2和主程序的输出次序是有随机性的,所以会出现上述结果。 3、进程的控制程序1程序1#includemain()int p1,p2,i;while(p1=fork()=-1);if(p1=0)for(i=0;i20;i+)printf(child%dn,i);elsewhile(p2=fork()=-1);if(p2=0)for(i=0;i20;i+)printf(son%dn,i);else for(i=0;i20;i+)printf(daughter%dn,i);请记录运行结果分析由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。 但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。 这与打印单字符的结果相同。 程序2lockf(files,function,size)用作锁定文件的某些段或者整个文件。 本函数的头文件为#includeunistd.h参数定义int lockf(files,function,size)int files,function;long size;其中files是文件描述符;function是锁定和解锁1表示锁定,0表示解锁。 size是锁定或解锁的字节数,为0,表示从文件的当前位置到文件尾。 #includemain()int p1,p2,i;while(p1=fork()=-1);if(p1=0)lockf(1,1,0);for(i=0;i20;i+)printf(child%dn,i);lockf(1,0,0);elsewhile(p2=fork()=-1);if(p2=0)lockf(1,1,0);for(i=0;i20;i+)printf(son%dn,i);lockf(1,0,0);elselockf(1,1,0);for(i=0;i0)while(p2=fork()=-1);/*创建子进程p2*/if(p20)wait_mark=1;signal(SIGINT,stop);/*接收到c信号,转stop*/waiting();kill(p1,16);/*向p1发软中断信号16*/kill(p2,17);/*向p2发软中断信号17*/wait (0);/*同步*/wait (0);printf(parent process is killed!n);exit (0);elsewait_mark=1;signal(17,stop);signal(SIGINT,SIG_IGN);waiting();lockf(1,1,0);printf(child process2is killedby parent!n);lockf(1,0,0);exit (0);elsewait_mark=1;signal(16,stop);signal(SIGINT,SIG_IGN);waiting();lockf

温馨提示

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

评论

0/150

提交评论