c - Debugging open() command call with truss -


using truss -t'open' $(program_call) get:

open("command.txt", o_rdonly|o_nonblock)      = 5 response fifo file descriptor = -1 // open call literally sandwiched between print commands, not here? response fifo file descriptor = 9 open("response.txt", o_wronly|o_nonblock)     err#6 enxio response.txt: no such device or address 

the thing is, initialized file descriptor -1, know open call must have succeeded because changed value of variable. file descriptor literally initialized -1, somehow gets changed 9 in open command call (otherwise program end there) yet open call not show in truss call, , computer not recognize being open.

some code:

if ((outfd = open(cmd_fifo_name, o_wronly | o_nonblock)) == -1) {     fprintf(stderr, "client: failed open %s fifo.\n", cmd_fifo_name);     exit(1); } printf("resp_fifo file descriptor: %d\n", infd); /* open response fifo non-blocking reads. */ if ((infd = open(resp_fifo_name, o_rdonly | o_nonblock)) == -1) {     fprintf(stderr, "client: failed open %s fifo.\n", resp_fifo_name);     exit(1); } else printf("resp_fifo file descriptor: %d\n", infd); 

truss -f -t'open,close,read,write' run.sh useful enough find errors, run.sh bash file containing proper execution of program.


Comments