如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
《操作系统》实验报告实验序号:实验四实验项目名称:实验04Linux多进程编程学号1207022103姓名陈华荣专业、班网络工程实验地点实1-311指导教师李桂森实验时间2014.10.26实验目的及要求1.通过本实验的学习,使学生掌握Linux多进程编程的基本方法。2.实验内容:利用Linux多进程实现题目所要求的功能。3.以学生自主训练为主的开放模式组织教学二、实验设备(环境)及要求PC机三、实验内容与步骤1、编写一个显示“HELLO”的c语言程序,并利用GCC编译,然后运行此程序。(提示:若没有gcc,需先安装gcc编译程序)指令:Apt-getinstallupdateApt-getinstallgccCd/home/normaluesrTouchhelloworld.cVimhelloeorld.c在helloworld里编辑进:#include<stdio.h>Intmain(){Printf(“helloworld”);Return0;}然后用gcc进行编译运行:或者直接2、进程的创建:编制一程序,利用系统调用fork()创建两个子进程。程序运行时,系统中有一个父进程和两个子进程活动,分别让他们显示“A”、“B”和“C”,分析程序运行结果。3、用ctrl+alt+F2切换到第二个终端(tty2)并使用另外一个用户登录(可利用第二个实验创建的用户登录),然后使用who命令查看用户登录情况。用ctrl+alt+F1切换到第二个终端(tty1),修改第二步的程序,在每个进程退出前都加上一个sleep(20)的函数来延缓进程的退出,然后运行此程序,立即切换到tty2,使用ps-a命令查看系统运行的进程,观察程序创建的进程都有哪些?pid是多少?4、进程的管道通信:编制一程序,使用系统调用pipe()建立一管道,两个子进程P1和P2分别向管道各写一句话,父进程则从管道中读取出来并显示在屏幕。(提示:利用pipe创建管道,利用write和read函数分别进行写与读的操作,使用wait函数等待子进程结束)运行结果:5、利用Linux多进程编程实现以下功能:创建两个子进程;一个子进程(生产者进程)依次向缓冲区写入整数0,1,2,...,19;另一个子进程(消费者进程)暂停3s后,从缓冲区读数,每次读一个,然后将数字显示出来;父进程等待子进程2(消费者进程)的退出信息,待收集到该信息后,父进程就返回。(提示:用char数组创建缓冲区)码源:#include<pthread.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>charglobe_buffer[100];void*read_buffer_thread(void*arg);//这里先声明一下读缓存的线程,具体实现写在后面了intmain(){intres,i;pthread_tread_thread;for(i=0;i<20;i++)globe_buffer[i]=i;printf("\nTestthread:writebufferfinish\n");sleep(3);\\这里的3秒是多余,可以不要。res=pthread_create(&read_thread,NULL,read_buffer_thread,NULL);if(res!=0){printf("ReadThreadcreatError!");exit(0);}sleep(1);printf("waitingforreadthreadtofinish...\n");res=pthread_join(read_thread,NULL);if(res!=0){printf("readthreadjoinfailed!\n");exit(0);}printf("readthreadtestOK,havefun!!exitByeBye\n");return0;}void*read_buffer_thread(void*arg){inti,x;printf("Readbufferthreadreaddata:\n");for(i=0;i<20;i++){x=globe_buffer[i];printf("%d",x);globe_buffer[i]=0;//清空}printf("\nreadover\n");}---------------------------------------------------------------------------------以上程序编译:gcc-D_REENT