Я написал код для передачи файловых дескрипторов между несвязанными процессами с использованием потоков. Сервер должен дождаться, когда клиент отправит файловый дескриптор. Вот код сервера:Почему ioctl() не блокируется?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stropts.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
int pipefd[2];
pipe(pipefd);
close(pipefd[1]);
recvfd(pipefd[0]);
return 0;
}
void recvfd(int p)
{
struct strrecvfd rfdbuf;
struct stat statbuf;
int i;
i=ioctl(p, I_RECVFD, &rfdbuf);
printf("errno=%d\n",errno);
printf("recvfd=%d\n", rfdbuf.fd);
}
Но я получаю номер ошибки 9 - Плохой дескриптор файла.
Какую операционную систему вы используете? Трудно ответить на вопрос о вызове ОС, не зная ОС. – Dipstick
Почему, на ваш взгляд, это ошибка? Этот код даже не проверяет возвращаемое значение ioctl. Если он не равен -1, errno не изменяется и может иметь значение из предыдущего системного вызова (например, в динамическом загрузчике или процедурах запуска). – mark4o