操作系统 进程的管道通信 实验报告
操作系统实验三进程的管道通信
实验三进程的管道通信
一、实验目的:
(1)加深对进程概念的理解,明确进程和程序的区别;
(2)学习进程创建的过程,进一步认识并发执行的实质;
(3)分析进程争用资源的现象,学习解决进程互斥的方法;
(4)学习解决进程同步的方法;
(5)掌握Linux系统进程间通过管道通信的具体实现方法。
二、实验内容及要求:
(1)使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话(写的内容自己定,但要有该进程的一些信息);
(2)父进程从管道中读出来自两个子进程的消息,显示在屏幕上;
(3)要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的消息;
(4)两个子进程要并发执行;
(5)实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定;
(6)实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。
三、实现:
相关的系统调用
fork() 用于创一个子进程。
格式:int fork();
返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID值;当返回-1时,创建失败。
wait() 常用来控制父进程与子进程的同步。
在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。
返回值:大于0时,为子进程的ID值;等于-1时,调用失败。
操作系统实验报告进程的管道及消息通信
运行结果如下:
结果分析:
父进程首先被调用时,运行结果为:
之后父进程阻塞等待子进程终止,当系统调度子进程运行时,输出如下的信息:
之后父进程被唤醒,调度运行,输出如下结果后程序退出。
对于以上的结果:首先父进程使用pipe(chan1)系统调用打开一个无名管道,之后创建一个子进程。子进程复制父进程的打开文件表。为了正确通信,父进程关闭读通道close(chan1[0]),子进程关闭写通道close(chan1[1])。父进程向管道写,子进程从管道读。完成一次通信之后,父进程分别关闭自己的写/读通信,管道文件消失。
2.以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。)
编写的程序如下:
运行结果是:
结果分析:通过程序运行结果可知,先打开文本文件,如果文本打开失败,则执行exit(1),退出程序,如果文本通过函数开成功,则popen 创建一个可写管道,将命令行chcase的输入与管道的输入连接起来,然后向管道输入数据,此时命令行就可以通过管道接受文本文件的数据了,在从文件中读出数据时,独处的内容放在line[]数组中,fpin表示从刚打开的文件里读出。之后要编写字母大小写转化函数,来实现小写字母转化成大写字母。
3.创建有名管道。
编写的程序如下:
运行结果是:
前台运行结果:
后台运行结果:
结果分析:此程序是把管道和命令联系起来,read( )的系统调用格式是read(fd,buf,n),参数定义是int read(fd,buf,n); int fd; char *buf; unsigned n;它的功能是从fd所指示的文件中读出n个字节的数据,并将它们送至由指针buf所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止;write( )系统调用格式是read(fd,buf,n),它的功能是把n个字节的数据,参数定义同read( ),而父进程则从管道中读出来自两个进程的信息,显示在屏幕上。从buf所指向的缓冲区写到由fd 所指向的文件中。程序中的string[0]+=1表示字符串中的第一个字符的ASCII加1
操作系统实验报告(进程的管道及消息通信)
四、实验过程与分析
在1例子中: 1、pipe( )是建立一无名管道,系统调用格式为 pipe(filedes)参数定义是int pipe(filedes);int filedes[2];其中,filedes[1]是写入端,filedes[0]是读 出端。 2、read( )的系统调用格式是read(fd,buf,nbyte),参 数定义是int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte;它的功能是从fd所指示的文件中读 出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直 到锁打开为止。 3、write( )系统调用格式是read(fd,buf,nbyte),它的 功能是把nbyte 个字节的数据,参数定义同read( ),而父进程则从管道中读出来自两个进程的信 息,显示在屏幕上。从buf所指向的缓冲区写到 由fd所指向的文件中。如文件加锁,暂停写入, 直至开锁。 五、实验总结
2、打开一个以命令行为参数的管理文件,完成
进程之间的通信进程
例子:以命令行为参数的管理文件的示例。 假设有一个的可执行程序chcase,从标准输出设备读字符,将小写 字母转换成大写字母并进行输出。 主程序使用popen创建管道,实现将某文件中的字母转换成大写字 母。其中的文本文件名作为参数传进来。源程序如下: #include<sys/wait.h> #include<stdio.h> #define MAXLINE 100 int main(int argc,char *argv[]) { char line[MAXLINE]; FILE *fpin,*fpout; if(argc!=2) {
操作系统实验三进程的管道通信精编版
操作系统实验三进程的管道通信精编版
MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】
实验三进程的管道通信
一、实验目的:
(1)加深对进程概念的理解,明确进程和程序的区别;
(2)学习进程创建的过程,进一步认识并发执行的实质;
(3)分析进程争用资源的现象,学习解决进程互斥的方法;
(4)学习解决进程同步的方法;
(5)掌握Linux系统进程间通过管道通信的具体实现方法。
二、实验内容及要求:
(1)使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话(写的内容自己定,但要有该进程的一些信息);
(2)父进程从管道中读出来自两个子进程的消息,显示在屏幕上;(3)要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的消息;
(4)两个子进程要并发执行;
(5)实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定;(6)实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。三、实现:
相关的系统调用
fork()用于创一个子进程。
格式:intfork();
返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID 值;当返回-1时,创建失败。
wait()常用来控制父进程与子进程的同步。
在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。
进程的管道通信实验报告
进程的管道通信实验报告
一、实验目的
本实验旨在通过实际操作,深入理解进程间通信(IPC)的原理,掌握管道通信的实现方法,提高对操作系统进程管理的理解。
二、实验环境
实验环境为Linux操作系统,使用Shell脚本进行进程的管道通信实验。
三、实验内容
1. 创建两个Shell脚本文件,分别命名为sender.sh和receiver.sh。
2. 在sender.sh中,编写一个简单的程序,用于向管道中写入数据。程序包括一个无限循环,每次循环中随机生成一个数字并写入管道。
3. 在receiver.sh中,编写一个简单的程序,用于从管道中读取数据。程序同样包括一个无限循环,每次循环中从管道中读取一个数字并输出。
4. 使用Shell命令将sender.sh和receiver.sh链接起来,实现进程间的管道通信。
四、实验过程
1. 打开两个终端窗口,分别用于运行sender.sh和receiver.sh。
2. 在第一个终端窗口中,输入命令“bash sender.sh”运行sender.sh脚本。该脚本将创建一个无限循环,每次循环中随机生成一个数字并写入管道。
3. 在第二个终端窗口中,输入命令“bash receiver.sh”运行receiver.sh脚本。该脚本将创建一个无限循环,每次循环中从管道中读取一个数字并输出。
4. 观察两个终端窗口的输出,可以看到sender.sh进程向管道中写入的数字被receiver.sh进程读取并输出。
五、实验总结
通过本次实验,我们成功实现了进程间的管道通信。在实验过程中,我们深入了解了进程间通信的原理和实现方法,掌握了管道通信的基本操作。通过实际操作,我们更好地理解了操作系统中进程管理、进程间通信的相关知识。同时,我们也发现了一些不足之处,例如在程序中没有添加异常处理机制等。在今后的学习中,我们将继续深入探索进程间通信的相关知识,提高自己的编程技能和系统设计能力。
进程的管道通信实验总结
进程的管道通信实验是一个非常有用的实验,它允许两个进程之间进行数据交换。这个实验主要涉及到了管道、管道缓冲区以及进程之间的通信机制。以下是对这个实验的总结:
1. 管道的概念和作用:
管道是一种用于进程间通信的机制,它允许两个进程之间进行数据交换。在管道通信实验中,我们创建了一个管道,并使用它来在两个进程之间传递数据。管道的作用是连接两个进程,使得它们可以相互发送和接收数据。
2. 管道缓冲区:
管道缓冲区是管道中的一个重要概念。当一个进程向管道写入数据时,数据会被写入缓冲区中,等待另一个进程读取。当缓冲区中的数据被读取后,缓冲区中的数据会被移除,为新的数据腾出空间。
3. 进程间的通信:
在管道通信实验中,我们创建了两个进程,并使用管道来在它们之间进行通信。一个进程向管道写入数据,另一个进程从管道读取数据。通过这种方式,两个进程可以相互发送和接收数据。
4. 实验中的问题和解决方案:
在实验中,我们遇到了一些问题,如管道中的数据读写错误、进程间的通信问题等。为了解决这些问题,我们采取了一些措施,如检查数据的读写是否正确、确保进程间的通信畅通等。
5. 实验的意义和收获:
通过这个实验,我们深入了解了进程间通信的概念和机制,并掌握了管道通信的基本原理和方法。此外,我们还学会了如何解决实验中遇到的问题,提高了我们的编程能力和解决问题的能力。
总之,进程的管道通信实验是一个非常有意义的实验,它让我们深入了解了进程间通信的原理和方法。通过这个实验,我们不仅掌握了相关的知识和技能,还提高了我们的编程能力和解决问题的能力。
实验四 进程间管道通信
实验四进程间管道通信
实验目的:
使用使用系统调用pipe( )、close( )、write( )及read( )来编写一个父子进程通过管道传递信息的程序。
实验内容:
进程的管道通信是UNIX系统中的一种通信方式,提供有名管道和无名管道两种数据通信方式,这里主要是采用无名管道通信。
无名管道为建立管道的进程及其子孙进程提供一条以比特流方式传送消息的通信管道。该管道在逻辑上被看作管道文件,在物理上则由文件系统的高速缓冲区构成,而很少启动外设。发送进程利用文件系统的系统调用
write(fd[1],buf,size),把buf中的长度为size字符的消息送入管道入口fd[1],接收进程则使用系统调用read(fd[0],buf,size)从管道出口fd[0]读出size字符的消息置入buf中。这里,管道按FIFO(先进先出)方式传送消息,且只能单向传送。
利用unix系统提供的系统调用pipe,可以建立一条同步的通信管道。其格式为:pipe(fd)
intfd[2]
这里,fd[1]为写入端,fd[0]为读出端。参考程序:
用C语言编写一个程序,建立一个pipe,同时父进程生成一个子进程,子进程向pipe中写入一个字符串,父进程从pipe中读出该字符串。
//s4-3-1.c
#include<stdio.h>
main()
{
int x,fd[2];
char buf[30],s[30];
pipe(fd);/*创建管道*/
while((x=fork())==-1);/*创建子进程失败时,循环*/
if(x==0)
操作系统实验报告2doc
操作系统实验报告2
篇一:操作系统实验二实验报告
操作系统实验报告
——实验二:线程和管道通信实验
一、实验目的
通过 Linux 系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进(线)程间的通信和协作的效果 ,练习利用无名管道进行进(线)程间通信的编程和调试技术。
二、实验说明
1) 与线程创建、执行有关的系统调用说明
线程是在共享内存中并发执行的多道执行路径,它们共享一个进程的资源,如进程程序段、文件描述符和信号等,但有各自的执行路径和堆栈。线程的创建无需像进程那样重新申请系统资源,线程在上下文切换时也无需像进程那样更换内存映像。多线程的并发执行即避免了多进程并发的上下文切换的开销又可以提高并发处理的效率。
pthread 库中最基本的调用。
1.pthread_create 系统调用语法:
#include
Int pthread_create(pthread_t *thread,pthread_attr_t *attr,
void *(*start_routine)(void *) Void *arg);
pthread_create 函数创建一个新的线程。pthread_create 在 thread 中保存新线程的标识符。Attr 决定了线程应用那种线程属性。使用默认可给定参数 NULL; (*start_routine) 是一个指向新线程中要执行的函数的指针 arg 是新线程函数携带的参数。 Pthread_create 执行成功会返回0并在 thread 中保存线程标识符。执行失败则返回一个非0的出错代码
操作系统实验三进程的管道通信
操作系统实验三进程的管道通信
操作系统中的进程通信是指进程之间通过一定机制进行信息传递和交换的过程。而管道是常用的进程间通信(IPC)机制之一,它提供了一种半双工的通信方式,用于在具有亲缘关系的进程之间进行通信。本实验以Linux系统为例,介绍进程的管道通信。
一、进程间通信(IPC)概述
进程之间的通信是操作系统的重要功能之一,它使得不同进程能够共享信息、协调工作。Linux系统提供了多种进程间通信的方式,如管道、消息队列、信号、共享内存等。其中,管道是最简单、最常用的一种进程间通信方式。
二、管道的概念与原理
1.管道的概念
管道是一种特殊的文件,用于实现具有亲缘关系的进程之间的通信。整个管道可以看作是一个字节流,其中写入的数据可以被读取。管道通常是半双工的,即数据只能从一个进程流向另一个进程,而不能反向流动。
2.管道的原理
管道的内部实现是通过操作系统的缓冲区来完成的。当一个进程往管道写入数据时,数据被放置在写管道的缓冲区中。另一个进程从管道中读取数据时,数据被从读管道的缓冲区中取出。如果写管道的缓冲区为空,写操作将会阻塞,直到有数据被写入为止。同样,如果读管道的缓冲区为空,读操作将会阻塞,直到有数据可读为止。
三、管道的使用步骤
1.打开管道
在Linux系统中,使用`pipe`系统调用来创建管道。它接受一个包含
两个整数的参数数组,返回0表示成功,负数表示失败。成功创建管道后,会得到两个文件描述符,分别代表读管道和写管道。
2.进程间通信
在有亲缘关系的进程中,可以使用`fork`系统调用来创建一个子进程。父进程和子进程都可以使用管道进行读写操作。父进程可以关闭写管道描
操作系统实验四报告 进程的管道通信
} return 0; }
六、运行结果
七、问题解答
(1)指出父进程与两个子进程并发执行的顺序,并说明原因。 父进程创建子进程 1 并执行,然后父进程创建子进程 2 并执行,最后父进程执行,程序 结束。这是由进程的同步机制决定的,只有子进程向管道中写入信息后,父进程才能读取。 (2)若不对管道加以互斥控制,会有什么后果? 若不对管道加以互斥控制,可能会使一个子进程写入的信息还没来得及被父进程读出, 另一个子进程又写入信息而将之前的信息将覆盖,使信息丢失。 (3)说明你是如何实现父子进程之间的同步的。
lockf(fd[1],1,0); sprintf(Output,"Child process P2 is sending message!"); write(fd[1],Output,50); sleep(1); lockf(fd[1],0,0); exit(0); } wait(0); read(fd[0],Input,50); printf("%s\n",Input); wait(0); read(fd[0],Input,50); printf("%s\n",Input); exit(0);
实验四 进程的管道通信
一、实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。 (2)学习进程创建的过程,进一步认识进程并发执行的实质。 (3)分析进程争用资源的现象,学习解决进程互斥的方法。 (4)学习解决进程同步的方法。 (5)掌握 Linux 系统中进程间通过管道通信的具体实现。
操作系统实验,实验7 管道通信
/*readfifo.c*/ int main() { int fd; /*指向命名管道*/ char buf[100]; /*存储数据*/ if(mkfifo(FIFO,O_CREAT|O_EXCL)<0) { /*创建管道*/ perror("Create error!\n"); unlink(FIFO); /*清除管道*/ exit(0); } /* end if mkfifo*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);/*打开管道*/ if(fd<0) { perror("Create error!\n"); unlink(FIFO); exit(0); } /* end if fd*/
限制管道的大小
管道是一个固定大小的缓冲区 Linux中,该缓冲区的大小为1页,即4K字节,因此不像
文件那样不加检验地增长 写管道时可能变满,当这种情况发生时,随后对管道的 write()调用将默认地被阻塞,等待某些数据被读取,以便 腾出足够的空间供write()调用写
读取进程可能工作得比写进程快
O_EXCL、O_NONBLOCK等 返回:成功0,出错返回-1 错误存储在errno中
有名管道的打开
有名管道比管道多了一个 open操作 指向打开文
件的路径
打开文件 的方式
操作系统实验三进程的管道通信
操作系统实验三进程的
管道通信
Company number:【0089WT-8898YT-W8CCB-BUUT-202108】
实验三进程的管道通信
一、实验目的:
(1)加深对进程概念的理解,明确进程和程序的区别;
(2)学习进程创建的过程,进一步认识并发执行的实质;
(3)分析进程争用资源的现象,学习解决进程互斥的方法;
(4)学习解决进程同步的方法;
(5)掌握Linux系统进程间通过管道通信的具体实现方法。
二、实验内容及要求:
(1)使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话(写的内容自己定,但要有该进程的一些信息);
(2)父进程从管道中读出来自两个子进程的消息,显示在屏幕上;
(3)要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的消息;
(4)两个子进程要并发执行;
(5)实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定;
(6)实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。
三、实现:
相关的系统调用
fork() 用于创一个子进程。
格式:int fork();
返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID值;当返回-1时,创建失败。
wait() 常用来控制父进程与子进程的同步。
在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。
操作系统实验三进程的管道通信
实验三进程的管道通信
一、实验目的:
(1)加深对进程概念的理解,明确进程和程序的区别;
(2)学习进程创建的过程,进一步认识并发执行的实质;
(3)分析进程争用资源的现象,学习解决进程互斥的方法;
(4)学习解决进程同步的方法;
(5)掌握Linux系统进程间通过管道通信的具体实现方法。
二、实验内容及要求:
(1)使用系统调用pipe()建立一条管道线,两个子进程分别向管道
写一句话(写的内容自己定,但要有该进程的一些信息);
(2)父进程从管道中读出来自两个子进程的消息,显示在屏幕上;(3)要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的消息;
(4)两个子进程要并发执行;
(5)实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定;
(6)实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。三、实现:
相关的系统调用
fork() 用于创一个子进程。
格式:int fork();
返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID 值;当返回-1 时,创建失败。
wait() 常用来控制父进程与子进程的同步。
在父进程中调用wait() ,则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait() 返回继续执行原来的程序。
返回值:大于0 时,为子进程的ID 值;等于-1 时,调用失败。
操作系统实验报告2doc
操作系统实验报告2
篇一:操作系统实验二实验报告
操作系统实验报告
——实验二:线程和管道通信实验
一、实验目的
通过 Linux 系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进(线)程间的通信和协作的效果 ,练习利用无名管道进行进(线)程间通信的编程和调试技术。
二、实验说明
1) 与线程创建、执行有关的系统调用说明
线程是在共享内存中并发执行的多道执行路径,它们共享一个进程的资源,如进程程序段、文件描述符和信号等,但有各自的执行路径和堆栈。线程的创建无需像进程那样重新申请系统资源,线程在上下文切换时也无需像进程那样更换内存映像。多线程的并发执行即避免了多进程并发的上下文切换的开销又可以提高并发处理的效率。
pthread 库中最基本的调用。
1.pthread_create 系统调用语法:
#include
Int pthread_create(pthread_t *thread,pthread_attr_t *attr,
void *(*start_routine)(void *) Void *arg);
pthread_create 函数创建一个新的线程。pthread_create 在 thread 中保存新线程的标识符。Attr 决定了线程应用那种线程属性。使用默认可给定参数 NULL; (*start_routine) 是一个指向新线程中要执行的函数的指针 arg 是新线程函数携带的参数。 Pthread_create 执行成功会返回0并在 thread 中保存线程标识符。执行失败则返回一个非0的出错代码
操作系统实验7Linux进程通信-管道
实验7 Linux进程通信-管道
一、实验目的:
1)掌握操作系统的进程通信原理。
2)熟悉linux的进程通信方式。
3)设计程序,实现管道通信。
二、实验原理:
1、函数pipe
头文件:#include <unistd.h>
原型:int pipe(int filedes[2]);
说明:pipe建立管道,并将文件描述符由参数filedes数组返回,filedes[0]为管道里的读取端,filedes[1]则为管道的写入端。若成功返回0,否则返回-1。
2、函数close
头文件:#include <unistd.h>
原型:int close(int fd);
说明:当使用完文件后若不再需要则可使用close关闭该文件,若成功返回0,否则返回-1。
3、函数write
头文件:#inclue <unistd.h>
原型:ssize_t write(int fd,const void *buf,size_t count);
说明:write函数把参数buf所指的内存写入count个字节到参数fd所指的文件内。如果成功返回实际写入的字节数,否则返回-1。
4、函数strlen
头文件:#include <string.h>
原型:size_t strlen(const char *s);
说明:函数strlen用来计算指定的字符串s的长度,不包括结束字符’\0’。
5、函数memset
头文件:#include <string.h>
原型:void *memset(void *s,int c,size_t n);
进程通信实验报告
进程通信实验报告
进程通信实验报告
概述
进程通信是操作系统中非常重要的一个概念,它允许不同的进程之间进行数据
的交换和共享。在本次实验中,我们通过使用不同的进程通信机制,如管道、
消息队列和共享内存,来实现进程之间的数据传输和通信。本报告将详细介绍
实验的背景、实验过程、结果分析以及对实验的总结。
实验背景
进程通信是操作系统中的一个核心概念,它允许多个进程之间进行数据的交换
和共享。在现代操作系统中,进程通信是实现并发和协作的重要手段。了解不
同的进程通信机制以及它们的优缺点对于深入理解操作系统的原理和实现至关
重要。
实验过程
在本次实验中,我们使用了三种不同的进程通信机制:管道、消息队列和共享
内存。首先,我们创建了两个进程,一个作为发送方,一个作为接收方。然后,我们分别使用了管道、消息队列和共享内存来实现进程之间的数据传输和通信。管道是一种最简单的进程通信机制,它可以在父进程和子进程之间进行单向的
通信。我们通过创建一个管道,并将其连接到父进程和子进程的标准输入和标
准输出,实现了父子进程之间的数据传输。
消息队列是一种更为灵活的进程通信机制,它可以实现多个进程之间的双向通信。我们使用了系统提供的消息队列函数,创建了一个消息队列,并在发送方
将消息发送到队列中,接收方则从队列中接收消息。通过消息队列,我们实现
了进程之间的异步通信。
共享内存是一种高效的进程通信机制,它允许多个进程共享同一块内存空间。
我们使用了共享内存函数,创建了一个共享内存区域,并将其映射到两个进程
的虚拟地址空间中。通过共享内存,我们实现了进程之间的数据共享和同步。