实验八、进程间通信

实验八、进程间通信

项目 内容
这个作业属于哪个课程 班级课程的主页链接
这个作业的要求在哪里 班级课程的要求链接
学号-姓名 17043116-刘安
作业学习目标 1.了解进程间通信的常用方式;2.掌握管道、消息队列、信号量、共享内存实现进程间通信的方法。
  1. 举例说明使用匿名管道进行进程通信

父进程 fork 出一个子进程,通过无名管道向子进程发送字符,子进程收到数据后将字符串中的 小写字符转换成大写并输出。

编写文件 vim hellopipe.c

编译运行 ./hellopipe

父进程从键盘读取数据写到管道中

子进程从管道读取数据并把字母转换成大写输入到管道中

  1. 举例说明使用 mkfifo 命令创建命名管道以及简单演示管道如何工作

查看文件属性 当使用 mkfifo 创建 hello 文件后,查看文件信息如下

b) 使用 cat 命令打印 hello 文件内容

接下来你的 cat 命令被阻塞住

开启另一个终端,执行

然后你会看到被阻塞的 cat 又继续执行完毕,在屏幕打印 “hello world” 。如果你反过来执行上面 两个命令,会发现先执行的那个总是被阻塞

  1. 编写两个程序使用第2题中创建的管道进行通信

分别开启两个终端,分别运行 pipe_send 和 pipe_recv :

现在两个终端都处于阻塞状态,我们在运行 pipe_send 的终端输入数据,然后我们就可以在运行 pipe_recv 的终端看到相应的输出:

  1. 编写两个程序分别通过指定的键值创建 IPC 内核对象,以及获取该指定键值的 IPC 内核对象

  1. 编写一个程序可以用来创建、删除内核对象,也可以挂接、卸载共享内存,还可以打印、设置内核 对象信息。

先在另一个终端执行 ./shmctl -a ,然后在当前终端执行 ./shmctl -v ,最后在./shmtcl -a 运行结束后执行./shmtcl -v

  1. 编写两程序分别用于向消息队列发送数据和接收数据。 msg_send 程序定义了一个结构体 Msg , 消息正文部分是结构体 Person 。该程序向消息队列发送了 10 条消息

先运行 ./msg_send ,再运行 ./msg_recv 。
接收所有消息:

接收类型为 4 的消息,这时要重新运行 ./msg_send :

接收类型小于等于 3 的所有消息,这是不用再运行 ./msg_send :

  1. 编写程序举例说明信号量如何操作

  1. 编写程序使用信号量实现父子进程之间的同步,防止父子进程抢夺 CPU

posted @ 2020-05-24 13:27  liuanunique  阅读(533)  评论(0)    收藏  举报