c - Unable to open FIFO for writing -


'server' program side:

#define resp_fifo_name "response"  /* global variables */ char *cmdfifo = cmd_fifo_name; /* name of command fifo. */ char *respfifo = resp_fifo_name; /* name of response fifo. */  int main(int argc, char* argv[]) { int infd, outfd; /* fifo file descriptors. */  ... // blah blah other code here  /* create command fifo. */ if (mkfifo(cmdfifo, fifo_mode) == -1) {     if (errno != eexist) {         fprintf(stderr, "server: couldn’t create %s fifo.\n", cmd_fifo_name);         exit(1);     } }  /* create response fifo. */ if (mkfifo(respfifo, fifo_mode) == -1) {     if (errno != eexist) {         fprintf(stderr, "server: couldn’t create %s fifo.\n", resp_fifo_name);         exit(1);     } } /* open command fifo non-blocking reading. */ if ((infd = open(cmdfifo, o_rdonly | o_nonblock)) == -1) {     fprintf(stderr, "server: failed open %s fifo.\n", cmd_fifo_name);     exit(1); }          /* open response fifo non-blocking writes. */ if ((outfd = open(respfifo, o_wronly | o_nonblock)) == -1) {             fprintf(stderr, "server: failed open %s fifo.\n", resp_fifo_name);             perror(resp_fifo_name);             exit(1);         } 

the program prints output of:

server: couldn’t create response fifo. 

i understand little on fifos professor didn't teach it. able manage reading examples , lecture notes. tried without o_nonblock flag causes program hang, required. don't understand why read fifo fine write fifo fails open.

from man-page :

a process can open fifo in non-blocking mode. in case, opening read succeed if noone has opened on write side yet; opening write fail enxio (no such device or address) unless other end has been opened.

you should open 1 in 'client'.


Comments