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