0
我想實現打開一個多線程,非阻塞文件。理想情況下,所需的解決方案是打開()&立即返回,並執行一些事情,如在open()操作實際完成時註冊要調用的回調(或處理信號或條件變量) 。爲此,我編寫了一個測試驅動程序,創建多個併發線程並嘗試打開相同的文件。我希望從openat()返回一個無效的文件描述符,並帶有errno == EAGAIN,但open調用似乎總是阻塞,直到open成功完成。非阻塞文件openat()
是否有這種方法的非阻塞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);
}