一、实验目的 |
2.理解进程通信的原理。 |
二.实验环境 |
VMware WorkstationPro |
三、实验内容与步骤 |
①管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 pipe()函数。pipe()会建立管道,并将文件描述词由filedes数组返回。filedes[O]为管道的读取端,filedes[1]为管道的写入端。该函数若执行成功,则返回0,否则返回一1,错误原因存于errno中。 #include<unistd.h> int pipe(int filedes[2]) ②消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 msgsnd()函数。该函数定义在sys/types.h文件、sys/ipc.h文件及sys/msg.h文件中,函数原形为ingmsgsnd(int msqid,struct msgbuf * msgp,int msgsz,int msgflg)。msgsnd()用来将参数msgp指定的消息送至参数msqid的消息队列内,参数msgp为msgbuf结构其定义如下: struct msgbuf { long mtypei;//消息的种类,必须大于0 char mtext[i];//消息数据 } ③共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 shmget()函数。该函数定义在sys/ipc.h文件和sys/shm.h文件中,函数原形为int shmget(key_tkey,int size,int shmflg)。shmget()用来取得参数key所关联的共享内存识别代号。如果参数key为IPC_PRI-VATE,则会建立新的共享内存,其大小由参数size决定。shmflg参数在 |
操作系统实验报告——进程管道消息信号量共享存储区通信实验
于 2022-12-22 20:10:28 首次发布