Je voudrais implémenter un fichier multithread, non-bloquant ouvert. Idéalement, la solution désirée serait de faire un appel à open() & pour le renvoyer immédiatement, et faire quelque chose comme enregistrer un rappel à appeler (ou gérer un signal, ou une variable conditionnelle) quand l'opération open() est réellement terminée . À cette fin, j'ai écrit un petit pilote de test qui crée plusieurs threads simultanés et essaie d'ouvrir le même fichier. J'aurais espéré que le retour de openat() soit un descripteur de fichier invalide, avec errno == EAGAIN, mais l'appel ouvert semble toujours bloquer jusqu'à ce que l'ouverture se termine avec succès.fichier non-bloquant openat()
Existe-t-il une implémentation de cette approche pour un open() non bloquant?
Merci d'avance.
Référence Code Sujet:
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);
}