我有一个父进程,其中有一些子进程,在分叉之前不需要父进程打开的FIFO描述符。我尝试过以下方法
fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
打开fd后。fd = open(/tmp/testfifo, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
要查看其是否正常工作,我按照以下步骤进行操作,但是第一个不起作用,因为它被确定为a bug。但是,我不明白第二个错误是什么。
第一种方法,
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
我的方法错误吗?还是我做错了什么?还是我误解了国旗的原理?