#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/select.h>
#define MAX(x,y) ((x)>(y)?(x):(y))
int main() {
int d1 = open("t1", O_RDONLY|O_NONBLOCK);
if (d1==-1) { perror("ouverture t1"); exit(1); }
printf("ouverture t1\n");
int d2 = open("t2", O_RDONLY|O_NONBLOCK);
if (d2==-1) { perror("ouverture t2"); exit(1); }
printf("ouverture t2\n");
int compteur = 0;
char c;
size_t l;
fd_set enslec;
while (1) {
compteur++;
printf("%d\n",compteur);
FD_ZERO(&enslec);
FD_SET(d1,&enslec);
FD_SET(d2,&enslec);
int n = select(MAX(d1,d2)+1,&enslec,NULL,NULL,NULL);
printf("%d descripteurs à lire\n",n);
if (n>0) {
if (FD_ISSET(d1,&enslec)) {
l = read(d1,&c,1);
switch(l) {
case 1:
printf("J'ai lu dans t1 %c (%d)\n",c,compteur);
break;
case 0:
printf("Fin de fichier sur t1\n");
break;
case -1:
if (errno!=EAGAIN) { perror("lecture t1"); }
break;
}
}
if (FD_ISSET(d2,&enslec)) {
l = read(d2,&c,1);
switch(l) {
case 1:
printf("J'ai lu dans t2 %c (%d)\n",c,compteur);
break;
case 0:
printf("Fin de fichier sur t2\n");
break;
case -1:
if (errno!=EAGAIN) { perror("lecture t2"); }
break;
}
}
}
}
}