'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
Post a Comment