#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

main(int argc, char *argv[])
{
	int f_des[2], i, j;
static 	char message[BUFSIZ];

	if(argc != 2)
	{
		fprintf(stderr, "Usage: %s message\n", argv[0]);
		exit(1);
	}

	if(pipe(f_des) == -1)
	{
		perror("pipe");
		exit(2);
	}
	
	close(f_des[1]);

	switch(fork())
	{
		case -1:
			perror("fork");
			exit(3);
		case 0:
//			close(f_des[1]);
			if(i=read(f_des[0], message, BUFSIZ) != -1)
			{
				printf("child inner %d\n", i);	
				printf("message recived by child: %s\n", message);
				fflush(stdout);
			}
			else 
			{
				printf("child outer %d\n", i);
				perror("read");
				exit(3);
			}

			break;
		default:
			close(f_des[0]);
			if(j=write(f_des[1], argv[1], strlen(argv[1])) != -1)
			{
				printf("parent inner %d\n", j);
				printf("message sent by parent: %s\n", argv[1]);
				fflush(stdout);
			}
			else 
			{
				printf("parent outer %d\n", j);
				perror("write");
				exit(5);
			}
	}

	exit(0);
}		
