I would like to implement a bidirectional fifo. The code below is functioning but it is not using bidirectional fifo. I have searched all over the internet, but haven't found any good example... 
How can I do that?
Thanks,
WRITER.c:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#define MAXLINE 4096
#define READ 0
#define WRITE 1
int main (int argc, char** argv)
{
 int a, b, fd;
 do {
   fd=open("/tmp/myfifo",O_WRONLY);
   if (fd==-1) sleep(1);
  } while (fd==-1);
  while (1) {
   scanf("%d", &a);
   scanf("%d", &b);
   write(fd,&a,sizeof(int));
   write(fd,&b,sizeof(int));
   if (a == 0 && b == 0)
   {
    break;
   }
  }
  close(fd);
  return 0;
}
READER.c:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/stat.h>
#define MAXLINE 4096
#define READ 0
#define WRITE 1
int main(void)
{
  int n1, n2;
  int fd;
  mkfifo("/tmp/myfifo",0660);
  fd=open("/tmp/myfifo",O_RDONLY);
  while(read(fd, &n1, sizeof(int) ))
  {
 read(fd, &n2, sizeof(int));
 if (n1 == 0 && n2 == 0)
 {
  break;
 }
 printf("soma: %d\n",n1+n2);
  printf("diferenca: %d\n", n1-n2);
   printf("divisao: %f\n", n1/(double)n2);
   printf("multiplicacao: %d\n", n1*n2); 
  }
  close(fd);
  return 0;
}