#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/types.h>
int main()
{
int pipe_fd[2];
int res = 0;
char r_buff[1024];
char w_buff[1024];
int iread_len = 0;
int iwrite_len = 0;
int status;
memset(r_buff, 0x00, sizeof(r_buff));
memset(w_buff, 0x00, sizeof(w_buff));
res = pipe(pipe_fd);
if (res < 0)
{
printf("pipe exec failed, errno=%d, errmsg=%s, res=%d\n", errno, strerror(errno), res);
return -1;
}
res = fork();
if (res < 0)
{
printf("fork exec failed, errno=%d, errmsg=%s, res=%d\n", errno, strerror(errno), res);
exit(1);
}
else if (res == 0)
{
close(pipe_fd[1]);
iread_len = read(pipe_fd[0], r_buff, sizeof(r_buff)-1);
printf("child process read buff=%s, len=%d\n",r_buff, iread_len );
close(pipe_fd[0]);
exit(2);
}
else
{
close(pipe_fd[0]);
strcpy(w_buff, "hello ipc!");
iwrite_len = write(pipe_fd[1], w_buff, strlen(w_buff));
printf("parent process write buff=%s, len=%d\n",w_buff, iwrite_len );
close(pipe_fd[1]);
wait(&status);
printf("child process return code=%d\n", status>>8);
}
return 0;
}
