У меня есть родительский процесс, в котором есть некоторые дочерние элементы, которым не нужен дескриптор FIFO, открытый родительским элементом перед разветвлением.Я попытался сделать следующие подходы, которые
fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
после открытия FD. fd = open(/tmp/testfifo, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
Чтобы увидеть, работает ли он правильноЯ делаю следующие шаги, но первый не работает, так как он определен как ошибка .Однако я не понимаю, что не так со вторым.
Первый подход,
if (fcntl(fd, F_GETFD) & FD_CLOEXEC) {
fprintf(stderr, "FD_CLOEXEC is set\n");
}
Второй подход через терминал,
lsof -n | grep /private/tmp/testfifo
С двумядети это печатает,
program 17898 soner 3r FIFO 0t0 5274098 /private/tmp/testfifo
program 17898 soner 4w FIFO 0t0 5274098 /private/tmp/testfifo
program 17899 soner 3r FIFO 0t0 5274098 /private/tmp/testfifo
program 17899 soner 4w FIFO 0t0 5274098 /private/tmp/testfifo
program 17900 soner 3r FIFO 0t0 5274098 /private/tmp/testfifo
program 17900 soner 4w FIFO 0t0 5274098 /private/tmp/testfifo
Мой подход неверен?Или я сделал что-то не так?Или я неправильно понял обоснование флага?