/*
 * fifo_read.c - 'cat <FIFO>' which doesn't quit when FIFO's writer disconnects
 * Written by Paul Donohue <Code@Linux.TopQuark.net>
 * Revision 2009.05.15
 */

#include <stdio.h>
#include <stdlib.h>  // exit()
#include <fcntl.h>   // O_RDONLY
#include <unistd.h>  // STDOUT_FILENO

int main(int ArgumentCount, char *Arguments[])
{
  int FIFO;
  char Buffer[512];
  int Size;

  if(ArgumentCount != 2)
  {
    fprintf(stderr, "Usage: %s <FIFO>\n", Arguments[0]);
    exit(1);
  }

  if((FIFO = open(Arguments[1], O_RDONLY)) < 0)
  {
    perror(Arguments[1]);
    exit(1);
  }

  while(1)
  {
    Size = read(FIFO, Buffer, sizeof(Buffer));
    write(STDOUT_FILENO, Buffer, Size);
  }

  close(FIFO);
  return 0;
}

