Я хотел бы реализовать многопоточный неблокирующий открытый файл. В идеале желаемым решением было бы сделать вызов open () и заставить его немедленно вернуться, и сделать что-то вроде регистрации обратного вызова для вызова (или обработки сигнала, или условной переменной), когда операция open () фактически завершена. , Для этого я написал небольшой тестовый драйвер, который создает несколько потоков одновременно и пытается открыть один и тот же файл. Я бы надеялся, что возвращаемое из openat () возвращение будет неверным файловым дескриптором с ошибкой == EAGAIN, но вызов open всегда блокируется до тех пор, пока open не завершится успешно.
Есть ли реализация этого подхода для неблокирующего open ()?
Заранее спасибо.
Код ссылки на нить:
void* OpenHandler(void* args)
{
// Declarations removed
Dir = "/SomeDir";
if ((DirFd = open(Dir, O_RDONLY )) < 0) {
printf("********Error opening Directory*******\n");
return NULL;
}
do {
FileFd = openat(DirFd, &FileName[DirLen], O_RDONLY | O_NONBLOCK);
/* If open failed */
if (FileFd == -1) {
if (errno == EAGAIN)
printf("Open would block\n");
else {
printf("Open failed\n");
pthread_exit(NULL);
}
}
else
Opened = 1;
} while (!Opened);
pthread_exit(NULL);
}