/* FIFO-based client example */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/errno.h> #include <unistd.h> #include <fcntl.h> #include <sys/wait.h> #include <string.h> #define oracle_fifo_name ".oracle_fifo" int main(void) { int fd_out, fd_in; int n; char c, buf[512]; extern int errno; /* send request */ if ((fd_out = open(oracle_fifo_name, O_WRONLY)) == -1) perror("cannot open oracle fifo"); sprintf(buf, "%d#", getpid()); if (write(fd_out, buf, strlen(buf)) == -1) perror("write"); /* receive feedback */ sprintf(buf, "%s_%d", oracle_fifo_name, getpid()); while ((fd_in = open(buf, O_RDONLY)) == -1) if (errno == ENOENT) { sleep(1); continue; } else perror("open"); if ((n = read(fd_in, buf, sizeof(buf))) == -1) perror("read"); buf[n] = '\0'; fprintf(stdout, "client: (%d) oracle says -\n\n", getpid()); fprintf(stdout, "%s\n", buf); exit(0); }