Part4. 管道通信
往期回顾:
Part0. 实验环境
Part1-1.熟悉UKylin环境
Part1-2.熟悉UKylin环境
Part2.进程控制
Part3.进程通信
一、实验目的
1.了解管道的概念。
2.掌握Linux支持的管道通信方式。
二、实验内容
- 编写一段程序,实现进程的管道通信。使用pipe()建立一个管道。子进程p1向管道写一句话:
Child process is sending message!
而父进程则从管道中读取来自于子进程的信息,显示在屏幕上。
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<stdlib.h>
int pid1; //存储子进程的PID号;
/******************主函数*****************/
int main()
{
int fd[2]; //打开文件的文件描述符,fd[1]是写入端,fd[0]是读出端
char OutPipe[100],InPipe[100]; //存储要写入管道的字符串
pipe(fd); //创建管道---建立一无名管道
while((pid1 = fork()) == -1); //创建子进程
if(pid1 == 0) //子进程
{
sprintf(OutPipe,"Child process is sending message!"); //将字符串输出到OutPipe(目的字符串)中
write(fd[1],OutPipe,50); //写进程从管道的写入端(句柄1)将50个字节数据写入管道
sleep(1); //延时1秒
exit(0); //子进程结束
}
else
{
wait(0); //等待子进程执行完毕
read(fd[0],InPipe,50); //读进程从管道的读出端(句柄0)读出50个字节数据
printf("%s\n",InPipe); //父进程将字符串显示在屏幕上
exit(0); //或者 return 0;
}
return 0;
}
代码修改:
要求:修改程序实现10次读、写管道文件的操作,应如何实现,请编写代码,并运行程序分析结果。
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<stdlib.h>
int pid1; //存储子进程的PID号;
/**************************主函数***********************/
int main()
{
int fd[2