更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。
要求:
①用pipe产生一个无名管道之后,再产生两个子进程A,B
②子进程A往管道写了一句HELLO后就退出了
③子进程B读到A写入的数据,再往管道中写入HELLO WORLD
④父进程读取最后管道中的数据并打印
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
int status;
char buf[50]; //read/write用于存放字符串
int fd1[2]; //用于存放管道1的两个文件描述符
if(pipe(fd1) == -1) //创建管道1,并将文件描述符放进fd1[2]中
{
perror("pipe()");
exit(1);
}
pid_t A = fork(); //创建第一个子进程A
if(A > 0) //父进程
{
pid_t B = fork(); //创建第二个子进程B
if(B > 0)
{
pid_t otherid=waitpid(B,&status,0); //阻塞等待B
read(fd1[0],buf,50);
printf("第二次读取:%s\n",buf);
}
if(B == 0) //子进程B
{
read(fd1[0],buf,50);
printf("第一次读取:%s\n",buf);
if(strcmp(buf,"HELLO")==0) //判断子进程B读A写入的数据是否为HELLO
{
write(fd1[1],"HELLO WORLD",50); //子进程B从管道1写入信息
}
exit(0);
}
}
else if(A == 0) //子进程A
{
bzero(buf,50);
write(fd1[1],"HELLO",50); //子进程A从管道1写入信息
exit(0); //退出子进程A
}
pid_t otherid=waitpid(A,&status,0); //阻塞等待A
close(fd1[0]);
close(fd1[1]);
}