#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; } } } } }