实验4进程间通信:管道_第1页
实验4进程间通信:管道_第2页
实验4进程间通信:管道_第3页
实验4进程间通信:管道_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验六 七实验六 七 进程间通信 管道进程间通信 管道 一 一 实验目的实验目的 1 了解 UNIX 管道的相关函数 2 了解UNIX 管道的建立与使用 3 能编写简单管道程序 二 二 实验预备知识实验预备知识 1 什么是管道 我们把从一个进程连接到另一个进程的一个数据流称为一个 管道 我 们通常是把一个进程的输出连接或 管接 经过管道来连接 到另一个进程 的输入 2 进程管道 1 popen函数 popen函数允许一个程序把另外一个程序当做一个新的进程来启动 并能对 它发送数据或者接收数据 格式 include FILE popen command open mode 其中 command参数是待操作的命令 open mode参数的值有r和w两种 r为读操作 表示是读入command参数提供的命令执行结果后 输出 w为写操作 表示是向command参数提供的命令进行写操作 即为其提供输 入信息 然后将这个命令的执行结果输出 有向命令提供输入信息时 使用的 是fwrite函数 其格式 fwrite 信息源 信息源类型长度 信息源的长度 写 入对象 如 想把buffer这个已定义的数组变量中的信息写入popen函数 作 为popen函数中command参数提供的命令的输入信息 且buffer为字符型数组 则可表示为 首先 将popen函数的结果赋给一个变量write fp write fp popen od c w 然后 用fwrite函数指定popen的写操作的信息来源 fwrite buffer sizeof char strlen buffer write fp 2 pclose函数 格式 include int pclose 文件指针 功能 当用popen启动的命令完成了操作的时候 我们可用pclose关闭与之 关联的文件流 Pclose调用只有在popen启动的进程结束之后才能返回 如果在 调用pclose的时候它仍在运行 pclose将等待该进程的结束 如 上例中已将od c命令运行 现要结束该命令 则用 pclose write fp 3 pipe函数 通过它在两个程序之间传递数据时不需要启动一个shell来解释给定的命令 降低了程序的运行成本 我们对数据读 写操作的控制也加强了 File popen 表示这个函数的返回值类型 为文件指针 当操作不成功时 返回值为空指针 格式 include int pipe int file descriptor 2 功能 int file descriptor 2 是一个由两个整数类型的文件描述符组成 的数组 的指针 它在数组里填上两个新的文件描述符后返回0 如果操作失 败 则返回 1 并设置errno指示失败的原因 那两个返回的文件描述符通过一种特殊的方式连接起来 写到 file descriptor 1 即管道描述符 1 的所有数据都可按照先进先出的顺序 从file descriptor 0 即管道描述符 0 读出来 将信息写入管道 write 管道写入端口 要写入的信息 信息长度 其返回值是写入信息的长度 将管道中信息读出 read 管道读出端口 信息读出后存放地址 信息长度 其返回值是读出信息的长度 4 fork函数 此为实验七的内容 格式 pid t fork 功能 创建一个新进程 若创建成功 会返回进程号 否则返回 1 如 创建新进程 fork result fork 判断创建是否成功 if fork result 1 判断是否在子进程 if fork result 0 还是在父进程 else 三 三 实验内容实验内容 1 在UNIX中编写c语言程序 2 管道函数的使用 3 管道的建立 4 通过创建新进程来实现管道 此为实验七的内容 四 四 实验步骤实验步骤 1 用 popen 和 pclose 函数建立一个管道 1 新建一个 C 语言程序 a1 c vi a1 c 程序目的 把数据经管道送往另一个程序 该程序我们选用 od 命令 文件 a1 c 的内容 include include 头文件 其中 stdil h 文件提供了一个常数 BUFSIZ 用 于指定的缓冲区长度 od 命令是一个八进制输出程序 它可把用户从键盘输入的字符串 包括控 制字符 回车换行 转换成单个字符后在屏幕上输出 如 od c 就是将用户输入的信息在屏幕上输出 一行 16 个字符 include int main FILE write fp char buffer BUFSIZ 1 sprintf buffer Once upon a time there was n write fp popen od c w if write fp NULL fwrite buffer sizeof char strlen buffer write fp pclose write fp exit EXIT SUCCESS exit EXIT FAILURE 保存退出 wq 2 用 gcc 命令将文件编译链接 生成目标文件 a1 out gcc o a1 out a1 c 3 运行目标文件 a1 out a1 out 查看运行结果 并将其记录到实验报告中 2 用 pipe 函数建立一个管道 1 新建一个 C 语言程序 a2 c vi a2 c 程序目的 用 pipe 函数建立一个管道 其中 从 file pipes 1 端口将 some data 数组中的信息写入管道 从 file pipes 0 端口读出管道中的信息 a2 c 文件内容 include include include include int main int data processed int file pipes 2 const char some data 123 char buffer BUFSIZ 1 memset buffer 0 sizeof buffer if pipe file pipes 0 data processed write file pipes 1 some data strlen some data 定义一个文件指针 以接收 popen 函数的值 定义一个数组 其实就是在内存中开辟一个缓冲区 用于存 放要输出的数据 将 Once upon a time tere was n 入缓冲区 执行 od c 命令 并改变其输入 若 od c 执行成 功 指定 buffer 缓冲区中的值为 od c 的输入 结束文件流 管道操作成功 退 出 管道操作失败 退出 定义一个变量 用于接收 write 和 read 函数的值 定义一个数组 用于做管道描述符 定义一个数组 用于保存向管道中写入的信息 定义一个数组 buffer 用于保存从管道取出的信息 在内存中开辟出一个缓冲区给 buffer 建立管道 若管道创建成功 将 some data 中的值写入管道 输出写入管道的信息长度 printf Wrote d bytes n data processed data processed read file pipes 0 buffer BUFSIZ printf Read d bytes s n data processed buffer exit EXIT SUCCESS exit EXIT FAILURE 保存退出 wq 2 用 gcc 命令将文件编译链接 生成目标文件 a2 out gcc o a2 out a2 c 3 运行目标文件 a2 out a2 out 查看运行结果 并将其记录到实验报告中 3 用 fork 函数创建管道 此为实验七的内容 1 新建一个 C 语言程序 a3 c vi a3 c 程序目的 先在内存中开辟出一段缓冲区 建立一个管道 再用 fork 函数 创建一个新进程 若在子进程中 就读出管道中的信息 若在父进程中 就向管道写入信息 a2 c 文件内容 include include include include int main int data processed int file pipes 2 const char some data 123 char buffer BUFSIZ 1 pid t fork result memset buffer 0 sizeof buffer if pipe file pipes 0 fork result fork if fork result 1 fprintf stderr Fork failure exit EXIT FAILURE 我们对 fork 的工作情况已经比较了解了 所以如果 fork result 等于 0 就说明我们是在子进程里 如下所示 if fork result 0 将管道中的信息读出到 buffer 中 输出从管道中读出的信息 退出 操作成功 退出 操作失败 定义一个变量 用于接收 write 和 read 函数的值 定义一个数组 用于做管道描述符 定义一个数组 用于保存向管道中写入的信息 定义一个数组 buffer 用于保存从管道取出的信息 在内存中开辟出一个缓冲区给 buffer 建立管道 若管道创建成功 定义一个变量 用于存放 fork 函数返回的进程 号 创建一个新进程 若进程创建失败 返回 操作失败 data processed read file pipes 0 buffer BUFSIZ printf Read d bytes s n data processed buffer exit EXIT SUCCESS 否则 我们就是在父进程里 如下所示 else data processed write file pipes 1 some data strlen some data printf Wrote d bytes n data processed exit EXIT SUCCESS 保存退出 wq 2 用 gcc 命令将文件编译链接 生成目标文件 a2 out gcc o a2 out a2 c 3 运行目标文件 a2 out a2 out 查看运行结果 并将其记录到实验报告中 各部分时间安排 共 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论