Отладка вызова команды open() с помощью фермы

С помощью truss -t'open' $(program_call) Я получил:

open("command.txt", O_RDONLY|O_NONBLOCK)      = 5
response FIFO file descriptor = -1
// Open call was literally sandwiched between print commands, but its not here?
response FIFO file descriptor = 9
open("response.txt", O_WRONLY|O_NONBLOCK)     Err#6 ENXIO
response.txt: No such device or address

Дело в том, что я инициализировал файловый дескриптор -1, поэтому я ЗНАЮ, что вызов open должен был быть успешным, потому что он изменил значение переменной. Дескриптор файла буквально инициализируется в -1, затем каким-то образом изменяется на 9 при вызове команды open (в противном случае программа на этом заканчивается), но при этом вызов open НЕ отображается в truss позвоните, и компьютер не распознает его как открытый.

Некоторый код:

if ((outfd = open(CMD_FIFO_NAME, O_WRONLY | O_NONBLOCK)) == -1) {
    fprintf(stderr, "Client: Failed to open %s FIFO.\n", CMD_FIFO_NAME);
    exit(1);
}
printf("RESP_FIFO FILE DESCRIPTOR: %d\n", infd);
/* Open the response FIFO for non-blocking reads. */
if ((infd = open(RESP_FIFO_NAME, O_RDONLY | O_NONBLOCK)) == -1) {
    fprintf(stderr, "Client: Failed to open %s FIFO.\n", RESP_FIFO_NAME);
    exit(1);
}
else printf("RESP_FIFO FILE DESCRIPTOR: %d\n", infd);

1 ответ

Решение

truss -f -t'open,close,read,write' run.sh было достаточно полезно, чтобы найти мои ошибки, где run.sh был файл Bash, содержащий правильное выполнение моей программы.

Другие вопросы по тегам