#include <stdio.h>
#include <string.h>
#include <sys/wait.h>

int main(int argc, char *argv[])
{ int FileDescriptors[2];
 int i, pid, status;
 char buffer[20];
 pipe(FileDescriptors);                       /* setting up the pipe   */
 if ((pid = fork()) == 0)
   /* in child */
   {  close(FileDescriptors[1]);                /* child closes FileDescriptors[1]     */
   while ((i = read(FileDescriptors[0], buffer, 6)) != 0)
     { buffer[i] = '\0';         /* string terminator     */
     printf("%d chars :%s: received by child\n", i, buffer);
     }
   _exit(0);                   /* child terminates      */
   }
 /* in parent */
 close(FileDescriptors[0]);                   /* parent writes FileDescriptors[1]    */
 write(FileDescriptors[1], "Hello Dolly!!!", sizeof("Hello Dolly!!!"));
 close(FileDescriptors[1]);                   /* finished writing FileDescriptors[1] */
 while (wait(&status)!=pid);    /* waiting for pid       */
 if (status == 0)  printf("child finished\n");
 else printf("child failed\n");
 return(0);
}
