J'essaye de lire une FIFO en arrière-plan (en utilisant un thread) pendant que mon programme principal tourne dans une boucle infinie. Je veux utiliser select()
car sinon le processeur tourne à 100%, mais le example que j'ai trouvé ne fonctionne pas. Voici le code exemple:Lecture continue de FIFO en utilisant select()
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
mkfifo("FIFO", 0666);
fd_set readCheck;
fd_set errCheck;
char buffer[64];
struct timeval timeout;
int rv;
int fd = open("FIFO", O_RDONLY | O_RSYNC);
FD_ZERO(&readCheck);
FD_ZERO(&errCheck);
while (1) {
FD_SET(fd, &readCheck);
FD_SET(fd, &errCheck);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
rv = select(fd, &readCheck, NULL, &errCheck, &timeout);
if (rv < 0) {
printf("Select failed\r\n");
break;
}
if (FD_ISSET(fd, &errCheck)) {
printf("FD error\r\n");
continue;
}
if (FD_ISSET(fd, &readCheck)) {
memset(buffer, 0, sizeof(buffer));
rv = read(fd, buffer, sizeof(buffer));
if (rv < 0) {
printf("Read failed\r\n");
break;
}
printf(buffer);
buffer[64] = '\0';
}
}
close(fd);
return 0;
}
Quand j'écris rien de fichier FIFO se produit, mais en utilisant cat FIFO
imprime le contenu. Quel peut être le problème?
Veuillez fournir un lien vers la spécification de ce langage "C/C++"! Unteil alors il n'y a que les deux ** langages ** différents C et C++. – Olaf