#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
void child_rw_pipe(int readfd,int writefd)
{
char *message1 = "from child process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("child read from pipe :%s\n",message2);
}
void parent_rw_pipe(int readfd,int writefd)
{
char *message1 = "from parent process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("parent read from pipe :%s\n",message2);
}
int main(void)
{
int childfd[2],parentfd[2];
pid_t pid;
int stat_val;
if(pipe(childfd))
{
printf("create childpipe failed!\n");
exit(1);
}
if(pipe(parentfd))
{
printf("create parentpipe failed!\n");
exit(1);
}
pid = fork();
switch(pid)
{
case -1:
printf("fork error!\n");
exit(1);
case 0:
//子进程
close(childfd[0]);
close(parentfd[1]);
child_rw_pipe(parentfd[0],childfd[1]);
exit(0);
default:
close(childfd[1]);
close(parentfd[0]);
parent_rw_pipe(childfd[0],parentfd[1]);
wait(&stat_val);
exit(0);
}
return 0;
}
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
void child_rw_pipe(int readfd,int writefd)
{
char *message1 = "from child process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("child read from pipe :%s\n",message2);
}
void parent_rw_pipe(int readfd,int writefd)
{
char *message1 = "from parent process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("parent read from pipe :%s\n",message2);
}
int main(void)
{
int childfd[2],parentfd[2];
pid_t pid;
int stat_val;
if(pipe(childfd))
{
printf("create childpipe failed!\n");
exit(1);
}
if(pipe(parentfd))
{
printf("create parentpipe failed!\n");
exit(1);
}
pid = fork();
switch(pid)
{
case -1:
printf("fork error!\n");
exit(1);
case 0:
//子进程
close(childfd[0]);
close(parentfd[1]);
child_rw_pipe(parentfd[0],childfd[1]);
exit(0);
default:
close(childfd[1]);
close(parentfd[0]);
parent_rw_pipe(childfd[0],parentfd[1]);
wait(&stat_val);
exit(0);
}
return 0;
}