#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30
int main()
{
int fds[2];
char str1[]="Who are you?";
char str2[]="Thank you for your message";
char buf[BUF_SIZE];
pid_t pid;
pipe(fds); //fds数组中保存用于I/O的文件描述符
pid=fork(); //复制的并非管道,而是用于管道I/O的文件描述符
if(pid==0) //子进程区域
{
write(fds[1],str1,sizeof(str1));
// sleep(2); //如果注释这行代码,在第19行子进程将读回直接在第17行向管道发送的数据,结果父进程调用read函数后将无限期等待数据进入管道
read(fds[0],buf,BUF_SIZE); //这里的buf数组和父进程的buf数组不是同一个
printf("Child proc output: %s \n",buf);
}
else
{
read(fds[0],buf,BUF_SIZE);
printf("Parent proc output: %s \n",buf);
write(fds[1],str2,sizeof(str2));
//sleep(3); //如果注释这行代码,父进程先终止(会销毁处于僵尸状态的子进程)会弹出命令提示符,这时子进程仍在工作,故不会产生问题。
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30
int main()
{
char str1[]="Who are you?";
char str2[]="Thank you for your message";
char buf[BUF_SIZE];
int fds1[2],fds2[2];
pipe(fds1),pipe(fds2);
pid_t pid=fork();
if(pid==0)
{
write(fds1[1],str1,sizeof(str1));
read(fds2[0],buf,BUF_SIZE);
printf("Message from parent:%s\n",buf);
}
else
{
read(fds1[0],buf,BUF_SIZE);
printf("Message from child:%s\n",buf);
write(fds2[1],str2,sizeof(str2));
}
return 0;
}