通过这次实验,掌握了进程的概念,明确了进程的含义,认识并了解了并发执行的实质。这次实验学会了用fork()函数创建实验,了解到进程与子进程的创建过程。另外还掌握了LINUX系统中输出流重定向的使用,将程序的输出结果输出到文件中,而不是直接显示在屏幕上。
实验名称 实验学时 试验三 进程间通信 3 实验类型 实验时间 综合 2016.6.2,2016.6.9 一、 实验目的和要求
1、掌握进程另外的创建方法。
2、熟悉进程的睡眠、同步、撤消等进程控制方法。 3、了解什么是管道。
4、熟悉UNIX/LINUX支持的管道通信方式。
二、实验环境
Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4 三、实验原理及内容
1.实验原理
编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 2.实验步骤
(1)在文本编辑器输入程序:
#include
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))= =-1); if(pid1= =0) {
lockf(fd[1],1,0);
sprintf(outpipe,\
/*把串放入数组outpipe中*/
write(fd[1],outpipe,50); /*向管道写长为50字节的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0);
}
else
{
while((pid2=fork( ))= =-1); if(pid2= =0)
{ lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,\
write(fd[1],outpipe,50); sleep(5);
lockf(fd[1],0,0);
exit(0); } else
{ wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/
printf(\
wait(0);
read(fd[0],inpipe,50); printf(\
exit(0); } }
}
(2)在终端中,编译程序。 (3)输入./a.out执行程序 3、实验结果
实验输出结果如下 延迟5秒后显示
child 1 process is sending message!
再延迟5秒
child 2 process is sending message!
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
通过这次实验,熟悉了进程的睡眠、同步、撤消等进程控制方法,了解什么是管道,了解了UNIX/LINUX支持的管道通信方式。
实验名称 实验学时 实验四 文件的操作和使用 1 实验类型 实验时间 验证 2016.6.9 一、 实验目的和要求
熟悉文件系统的操作和使用方法。
二、实验环境
Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4 三、实验原理及内容
1、实验内容
设计一个程序,通过用密码字符串对文件内容进行逐字符异或操作的方法,实现对一个文件的加/解密。 2、实验步骤 (1)实验程序:
#include
int main(int argc,char *argv[]) {
FILE *fd1, *fd2, *fd3;
int n;
char jiami[4];
jiami[0]=’1’; jiami[1]=’2’; jiami[2]=’3’; jiami[3]=’4’; int k=0;
char temp;
fd1=fopen(“hello.c”,”r”); //源文件hello.c
fd2=fopen(“B13011206”,”w”); //加密后文件B13011206
while ((n=fgetc(fd1))>0) }
fclose(fd1); fclose(fd2); }
(2)打开终端,使用gcc编译,vi编译程序。生成可执行文件4。 (3)输入 ./4 hello.c aaa ,对hello.c程序加密并保存至aaa
(4)使用vi指令进入hello.c和aaa ,前者为加密前,后者为加密后程序。 3、实验结果:B13011206中的内容
_[]W]GWQ_AGPX]_\\_8_]_Q_AUW_GEV_]S_[_;[]@__R]___>J8CFX\\GR__[Q]^\\_m\\__ 8AQEGAZ___>L8 {
n=n^jiami[k]; k++; if (k>=4)
k=0;
fputc(n,fd2);
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
通过本次实验,我将课本上的理论知识应用于实践,加深了对操作系统基本概念的理解。在实验过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识。
这几次操作系统的实验让我学到很多,不仅仅是加深了我对理论知识的印象,更重要的是能够将理论知识应用于实践。希望以后的专业课程都能够开设一定的实践课程,亲自实践跟书本学习真的是完全不同的两种感受。最后,感谢老师的耐心教导和实验指导,这次实验我收获了很多。
指导教师评语 成 绩 批阅人 日 期