#include <stdio.h>
#define READ  0
#define WRITE 1
#define wr(a,b) (mode==READ?(b):(a))

FILE *p_open(char *commando, int mode)
{
 int fd[2];

 if(pipe(fd) < 0) return NULL;
 switch(fork())
  {
   case  -1 : return(NULL);
   case   0 : close(wr(fd[WRITE],fd[READ]));
              close(0,1);
              dup(wr(fd[READ],fd[WRITE]));
              close(wr(fd[READ],fd[WRITE]));
              execl("/bin/sh", "sh", "-c", commando, NULL);

   default  : close(wr(fd[READ],fd[WRITE]));
              return(FILE *)(wr(fd[WRITE],fd[READ]));
  }
}