操作系统报告_研究报告-商业贸易

上传人:s9****2 文档编号:568728758 上传时间:2024-07-26 格式:PDF 页数:26 大小:1.08MB
返回 下载 相关 举报
操作系统报告_研究报告-商业贸易_第1页
第1页 / 共26页
操作系统报告_研究报告-商业贸易_第2页
第2页 / 共26页
操作系统报告_研究报告-商业贸易_第3页
第3页 / 共26页
操作系统报告_研究报告-商业贸易_第4页
第4页 / 共26页
操作系统报告_研究报告-商业贸易_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《操作系统报告_研究报告-商业贸易》由会员分享,可在线阅读,更多相关《操作系统报告_研究报告-商业贸易(26页珍藏版)》请在金锄头文库上搜索。

1、. . . . . . c. . . . 操作系统实验报告 : 学号: 完成时间:2012 年 11 月 22 日 . . . . . . c. . . . 目录: 实验一:UNIX/LINUIX入门.1 实验二:进程管理.3 实验三:线程的管理.10 实验四:利用信号实现进程间通信.15 实验五:基于消息队列和共享内存的进程间通信.18 实验六:一个进程启动另一个程序的执行.23 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让

2、老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 实验一 UNIX/LINUIX入门 一、实验目的 了解 UNIX/LINUX 运行环境,熟悉 UNIX/LINUX 的常用基本命令,熟悉和掌握UNIX/LINUX下

3、c 语言程序的编写、编译、调试和运行方法。 二、实验内容 1、熟悉 UNIX/LINUX的常用基本命令如 ls、who 、pwd 、ps 等。 2、练习 UNIX/LINUX的文本行编辑器 vi 的使用方法 3、熟悉 UNIX/LINUX 下 c 语言编译器 cc/gcc的使用方法。用 vi 编写一个简单的显示“Hello,World! ”c 语言程序,用 gcc 编译并观察编译后的结果,然后运行它。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验设计 代码如下: #include void main() printf(he

4、llo world); 五、运行结果 1 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会

5、平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 六、收获及机会 此次实验让我熟悉了 Liunx 下的文本行编辑器 vi 和 c 语言编译器 cc/gcc 的使用方法。 七、参考资料 实验指导书 2 实验二 进程管理 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的

6、办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 一、实验目的 加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质 二、实验内容 (1)进程创建 编写一段程序,使用系统调用 fork() 创建两个子进程。当此程序运行时,在系统中有一 个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进 程分别显

7、示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程控制 修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程 序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信 编写程序实现进程的管道通信。使用系统调用 pipe() 建立一个管道,二个子进程 P1 和 P2 分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收 P1,再接收 P2)。 三、实验要求 按照要求编写程序,放在相应的目录中,编

8、译成功后执行,并按照要求分析执行结果, 并写出实验报告。 四、实验设计 (1)进程创建 使用 fork ()创建两个子进程,父进程等待两个子进程执行完在运行。 (2)进程控制 使用 fork ()创建两个子进程,父进程等待两个子进程分别输出一句话在运行。 (3)进程的管道通信 建立一个管道。在程序中先建立一个子进程,然后向管道中输入数据,然后从子进程中退出到父进程,读出管道数据,然后再建立一个子进程,写入数据,再读出,即可。 代码如下: (1) 进程创建: #include #include #include #include #include #include #define INPUT 0

9、 #define OUTPUT 1 3 void main() pid_t pid2; / 定义两个子进程 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了

10、眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . pid0=fork(); / 创建第一个子进程 if(pid00) / 判断是否创建成功 printf(Fork Failed); exit(-1); else if(pid0 = 0) printf(bn); else pid1=fork(); / 创建另一子进程 if(pid10) printf(Fork Failed); exit(-1); else if(pid1 = 0) printf(cn); else wait(NULL);

11、printf(an); / 父进程执行 exit(0); (2) 进程控制: #include #include #include #include #include #include 4 #define INPUT 0 #define OUTPUT 1 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办

12、公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . void main() pid_t pid2; pid0=fork(); if(pid00) printf(Fork Failed); exit(-1); else if(pid0 = 0) printf(this is bn); else pid1=fork(); if(pid10) prin

13、tf(Fork Failed); exit(-1); else if(pid1 = 0) printf(this is cn); else wait(NULL); printf(this is an); exit(0); (3) 进程的管道通信 5 #include #include 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边

14、帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . #include #include #include void main() int rw2; /*定义子进程号*/ pid_t pid2; int count,count2; /*创建无名管道*/ pipe(rw); char *msg1=child 1 proc

15、ess is sending message!n; 字符串 msg1 char *msg2=child 2 process is sending message!n; 字符串 msg2 char buf50,s50; int result; result=pipe(rw); if(result=-1) printf(failed in calling pipe); /*创建子进程*/ if(pid0 = fork() = -1) printf(Error in forkn); exit(1); if(pid0 = 0) /printf(child 1 process is sending me

16、ssage!n); /*子进程向父进程写数据,关闭管道的读端*/ close(rw0); write(rw1,msg1, 1+strlen(msg1); close(rw1); exit(0); else if(pid1 = fork() = -1) printf(Error in forkn); exit(1); if(pid1 = 0) /printf(child 2 process is sending message!n); /*子进程向父进程写数据,关闭管道的读端*/ 6 close(rw0); write(rw1, msg2, 1+strlen(msg2); 的事情的但是有时候一些

17、刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . .

18、. . c. . . . close(rw1); exit(0); else /*执行父进程*/ /printf(in the spawning (parent) process.n); /*父进程从管道读取子进程写的数据,关闭管道的写端*/ close(rw1); count=read(rw0,buf,sizeof(buf); count2=read(rw0,s,sizeof(s); close(rw0); printf(%d %sn,count,buf); printf(%d %sn,count2,s); 五、运行结果 (1)进程创建 7 的事情的但是有时候一些刚刚入职的新人朋友们却不知道

19、该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . (

20、2)进程控制 8 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻

21、到两手空空地去吃饭我们新. . . . . . c. . . . (3)进程的管道通信 六、收获及机会 此次实验让我对进程和管道有了进一步的理解,用 fork() 创建完子进程后,要用 exit()返回父进程,当需要创建两个子进程的时候,不能直接在第一个子进程中直接 fork() ,要返回到父进程再用 fork() 再次创建子进程,否则将无法控制。创建完管道后,在向管道中写入数据和从管道中读出数据的时候, 要控制好管道的读写控制, 不适当的关闭和开启管道端口,将不能使得数据得到正确的读写。 这些是我此次实验最大的收获, 还需要在今后的时候发现更多的问题,有更深的理解。 七、参考资料 实验指导书

22、 9 实验三 线程的管理 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎

23、么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 一、实验目的 编写 Linux 环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函 数 pthread_create,pthread_join 和 pthread_exit 的用法 二、实验内容 1、主 程 序 创 建 两 个 线 程 myThread1 和myThread2 , 每个线程打印一句话。使用pthread_create(&id,NULL,(void *) thread,NULL)完成。 提示: 先定义每个线程的执行体,然后在 main 中()创建几个线程,最后主线程等待子线程结 束后再退出。

24、2、创建两个线程,分别向线程传递如下两种类型的参数 传递整型值 传递字符 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果, 并写出实验报告。 四、实验设计 先定义 2 个线程的带有参数的函数,参数分别为整型(int)和字符型(char ) ,每个函数中打印出相对应线程的话。在 main 函数中,利用 pthread_create函数创建该两个线程,在函数参数中的第四位,写入想要传进各进程的参数。最有利用 pthread_join等待第二个结束后退出。 代码如下: 1、主程序创建两个线程 myThread1 和 myThread2 , 每个线程打印一句话

25、。 #include #include #include #include void myThread1(void) / 线程 1 printf(this is phread1!n); void myThread2(void) / 线程 2 printf(this is phread2!n); int main(void) 10 pthread_t id2; 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老

26、板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . int ret; ret=pthread_create(&id0,NULL,(void *)myThread1,NULL); if(ret!=0) printf(Create pthread

27、 error!n); exit(1); ret=pthread_create(&id1,NULL,(void *)myThread2,NULL); if(ret!=0) printf(Create pthread error!n); exit(1); pthread_join(id0,NULL); pthread_join(id1,NULL); printf(This is the main process.n); return(0); 2、创建两个线程,分别向线程传递如下两种类型的参数 #include #include #include #include void myThread1(vo

28、id *a) int *num; num=(int*)a; printf(create integer is %dn,*num); 11 void myThread2( void *b) 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事

29、纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . char *x; x=(char*)b; printf(create char is %cn,*x); int main(void) pthread_t id2; int ret; char c=L; char *a=&c; int test=23; int *attr=&test; ret=pthread_create(&id0,NULL,(void *)my

30、Thread1,(void*)attr); if(ret!=0) printf(Create pthread error!n); exit(1); pthread_join(id0,NULL); ret=pthread_create(&id1,NULL,(void *)myThread2,(void*)a); if(ret!=0) printf(Create pthread error!n); exit(1); pthread_join(id1,NULL); printf(This is the main process.n); return(0); 12 五、运行结果 的事情的但是有时候一些

31、刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . .

32、. . c. . . . 1、主程序创建两个线程 myThread1 和 myThread2 , 每个线程打印一句话。 2、创建两个线程,分别向线程传递如下两种类型的参数 13 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了

33、自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 六、收获及体会 此次实验让我对线程的创建有了进一步的理解,在熟练掌握 pthread_create和pthread_join两个函数的应用上,进一步明白了如何向进程中传入参数。 七、参考资料 实验指导书 14 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说

34、有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 实验四 利用信号实现进程间通信 一、实验目的 学习 UNIX 类操作系统信号机制, 编写Linux 环境下利用信号实

35、现进程间通信的方法,掌握注册信号处理程序及signal() 调用方法。 二、实验内容 编写一个程序,完成下列功能:实现一个SIGINT 信号的处理程序,注册该信号处理程序,创建一个子进程,父子进程都进入等待。SIGINT 信号的处理程序完成的任务包括打印接受到的信号的编号和进程PID。编译并运行该程序,然后在键盘上敲Ctrl + C ,观察出现 的现象,并解释。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果, 并写出实验报告。 四、实验设计 创建一个进程,在父子进程中都注册一个用户敲中断键即 Ctrl+C 的信号处理程序,在子进程中注册一个用户定义信

36、号 1,在父进程中注册一个用户定义信号 2,然后外部接收信号,最后在 main 函数中打印出信号的编号和进程 PID。在运行时,当用户键入 Ctrl+C 时,会自动打印出父子进程 pid 值,但信号的编号始终是父进程中注册的用户定义信号。 代码如下: #include #include #include #include #define MAXSTACK 20 int stackMAXSTACK; int a=0; int b=0; sem_t sem,sem1; void ReadData1(void) FILE *fp=fopen(1.dat,r); sem_wait(&sem1); in

37、t i; for(i=0;i10;i+) fscanf(fp,%d,&stacka+); sem_post(&sem1); sem_post(&sem); fclose(fp); void ReadData2(void) 15 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女

38、朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . FILE *fp=fopen(2.dat,r); sem_wait(&sem1); int i; for(i=0;i8;i+) fscanf(fp,%d,&stacka+); sem_post(&sem1); sem_post(&sem); fclose(fp); void HandleData1(void) int i;

39、 sem_wait(&sem); for(i=0;i4;i+) int m=stackb+; int n=stackb+; printf(Plus:%d+%d=%dn,m,n,m+n); void HandleData2(void) int i; sem_wait(&sem); for(i=0;i4;i+) int m=stackb+; int n=stackb+; printf(mul:%d*%d=%dn,m,n,m*n); int main(void) pthread_t t1,t2,t3,t4; sem_init(&sem,0,0); sem_init(&sem1,0,1); pthre

40、ad_create(&t1,NULL,(void *)HandleData1,NULL); pthread_create(&t2,NULL,(void *)HandleData2,NULL); pthread_create(&t3,NULL,(void *)ReadData1,NULL); pthread_create(&t4,NULL,(void *)ReadData2,NULL); pthread_join(t1,NULL); 16 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个

41、前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 五、运行结果 六、收获及体会 此次实验让我学会了在 Linux 环境下利用信号实现进程间通信的方法,掌握注册信

42、号处理程序及 signal() 调用方法,也掌握了接收信号的写法。并在试验中,可通过用户自己输入信号来产生信号的编号,但是通过注册 SIGINT信号处理程序打印出的信号编号只是父进程中创建的用户定义信号 2,这点还是需要进一步讨论。但总的来说,对利用信号实现进程间的通信,有了更深入的一个了解,收获很大。 七、参考资料 实验指导书 17 实验五 基于消息队列和共享内存 的进程间通信 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老

43、板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 一、实验目的 Linux 系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉: 1. Linux 支持的消息通信机制及其使用方法 2

44、. Linux 系统的共享存储区的原理及使用方法。 二、实验内容 1.消息的创建、发送和接收 使用消息调用 msgget() 、msgsnd() 、msggrev() 、msgctrl() 编制长度为 1K 的消息的发送和接收程序。 2.共享存储区的创建、附接和断接 使用系统调用 shmget() 、shmat() 、shmctl() ,编制一个与上述功能相同的程序。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果, 并写出实验报告。 四、实验设计 1.消息队列:先定义一个消息结构,包含消息类型和文本长度。在 SERVER函数中,首先获得一个 KEY为

45、 75 的消息的描述符,然后利用 do while 循环来判断当消息类型为 1 的时候打印输出。在 CLIENT函数中,先获得消息队列,然后利用 for 循环将消息类型从10 赋值到 1,发送队列,并打印输出。最后在 main 函数中调用这两个函数。 #include #include #include #include #define MSGKEY 75 struct msgform /*消息结构*/ long mtype; /*消息类型*/ char mtexe1030; /*文本长度*/ msg; int msgqid,i; void CLIENT( ) int i; msgqid=ms

46、gget(MSGKEY ,0777); /*获得消息的描述符 msgqid*/ for(i=10;i=1;i-) /*将消息类型由 10 到 1 发送*/ msg.mtype=i; 18 printf(client)sentn); msgsnd(msgqid,&msg,1024,0); /*发送消息 msg 入 msgid 消息队列*/ 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天

47、清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . exit(0); void SERVER( ) msgqid=msgget(MSGKEY ,0777|IPC_CREAT); do msgrcv(msgqid,&msg,1030,0,0); /*从队列 msgi

48、d 接受消息 msg*/ printf(server)receiven); while(msg.mtype!=1); /*消息类型为 1 时,释放队列*/ msgctl(msgqid, IPC_RMID,0); exit(0); main() if(fork() SERVER(); else CLIENT( ); wait(0); wait(0); 2.共享存储区: 先获取共享区, KEY为 75, 并获得描述符, 然后将该共享存储区附接到 addr这个虚拟地址上, 如消息队列类似, 利用 while 循环从 10 到 1 打印输出, 并将 i 值赋给 addr 。在 SERVER中,创建共享

49、存储区,并将起始地址也设置为 addr ,服务进程共享存储区,所以直接用 while 循环输出打印“receive ” 。 代码如下: #include #include #include #define SHMKEY 75 /*定义共享区关键词*/ int shmid,i; int *addr; CLIENT() int i; 19 shmid=shmget(SHMKEY ,1024,0777); /*获取共享区*/ addr=shmat(shmid,0,0); /*共享区起始地址为 addr*/ 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该

50、犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . for(i=9;i=0;i-) while(*

51、addr!= -1); printf(client)sentn); *addr=i; exit(0); SERVER() shmid=shmget(SHMKEY ,1024,0777|IPC_CREAT); addr=shmat(shmid,0,0); do *addr=-1; /*服务进程使用共享区*/ while(*addr=-1); printf(server)receivedn); while(*addr); shmctl(shmid,IPC_RMID,0); exit(0); main() if(fork()SERVER(); if(fork()CLIENT(); wait(0);

52、wait(0); 20 五、运行结果 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白

53、无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 1 消息队列: 2、共享存储区: 21 六、收获及体会 此次实验让我对消息队列的获取、传送和共享存储区有了更加深入的了解。 理论上来说应该是client 和server 交替出现,实际上是client 先发送了两条,而且最后的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前

54、辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . server 接收了2条,但二者分别发送和接收了10条信息,这个和设想是一样的。通过实验我了解到,message 的传送和控制并不保证完全同步,当一个程序不再激活状态的时候,它完全可能继续睡眠,造成上面现象,在多次send 后才receive

55、 。 共享存储区的运行结构和预想完全吻合,没有疑问。 七、参考资料 实验指导书 22 实验六 一个进程启动另一个程序的执行 一、实验目的 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我

56、像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . 编写 Linux 环境下, fork() 与 exec() 的结合使用实现一个进程启动另一个程序的执行的基本方法,掌握 exec() 的集中调用方法。 二、实验内容 父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。 提示:从终端读取要执行的命令可用fgets() 实现。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果, 并写出

57、实验报告。 四、实验设计 定义一个字符数组来放置命令字符,并用 fgets() 来实现读取用户输入的命令字符并存入字符数组。 用 if 来判断当用户输入”quit” 时, 退出当时程序。 子程序中调用 execlp() ,执行成功的话不返回,失败的话返回个-1,并将失败原因打印出来。在父进程中 wait等到子进程执行完,然后打印出子进程的返回值。 代码如下: #include #include #include #include #include #include #include char command256; int main() int rtn; int errorno; while(

58、1) printf(); fgets(command,256,stdin); /* 从终端读取命令 */ commandstrlen(command)-1=0; if(!strcmp(command,quit)break; /* 当输出 quit 时退出程序 */ if(fork()=0) /* 子进程执行此命令 */ errorno=execlp(command,command,NULL,NULL); /* 如果 exec 函数返回,表明没有正常执行命令,打印错误信息*/ 23 perror(command); exit(errorno); 的事情的但是有时候一些刚刚入职的新人朋友们却不知道

59、该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新. . . . . . c. . . . e

60、lse /* 父进程, 等待子进程结束,并打印子进程的返回值 */ wait(&rtn); printf(child process return %dn,rtn); return 0; 五、运行结果 六、收获及体会 此次实验让我对exec 类的函数有了一个更深的理解,我知道一个进程一旦调用 exec 类函数,它本身就“ 死亡” 了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。同时也学会了fgets() 的用法。 我写的程序运行后输入命令是不带参数的, 由于e

61、xeclp 是这么定义的: int execlp(const char * file,const char * arg,);其中找到符合参数file 的文件后,第二个之后的参数当做该文件的argv0,argv1 . 所以在程序execlp 中的后面加入相应的参数即可。 七、参考资料 实验指导书 24 的事情的但是有时候一些刚刚入职的新人朋友们却不知道该如何做才好因此在无意中就那样的犯了一些不该犯的礼仪下面我们就一起来看看吧我第一次陪老板出去吃饭办公室的一个前辈说有人给老板灌酒的时候要帮老板挡酒所以我到老板面前让老板也一起喝看到我这样老板只能硬着头皮喝第二天清醒了后我吃饭的过程告诉前辈前辈便数落我不懂事哪有一边帮老板挡酒一边还给老板灌酒的办公室小突然说请吃饭还说会带女朋友过来吃饭的地方是个挺高级的餐其他同事纷纷拿出了自己或者几个凑份子买的礼物送给他们只有我像个外星人一样张大了嘴巴瞪圆了眼睛可以想象两手空空的我在那个场合下多为难想想也是我既然知道没人会平白无故地请客怎么还会傻到两手空空地去吃饭我们新

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号