/* myselect.c Exemplo de E/S multiplexada através da função select() * Lê concorrentemente um arquivo da entrada padrão e outro arquivo * cujo nome é passado em argv[1] * cada bloco lido é enviado para a saída padrão * Célio G. MC514 Março 2004 *****************************************************************************/ #include #include #define STDIN 0 #define STDOUT 1 #define BUFSIZE 81 int main(int argc, char ** argv) { char buf[BUFSIZE]; fd_set readfds; int fd, n; int n0= 1; int n1 = 1; if (argc < 2){ printf ("Uso: %s nome_arquivo_texto\n", argv[0]); exit(1); } if((fd = open(argv[1], O_RDONLY)) < 0 ){ printf("arquivo %s não encontrado\n", argv[1]); exit(1); } FD_ZERO (&readfds); while (n0 || n1){ FD_SET(STDIN, &readfds); FD_SET(fd, &readfds); select(fd + 1, &readfds, NULL, NULL, NULL); if (FD_ISSET(STDIN, &readfds)){ if(n = read(STDIN, buf, BUFSIZE)){ write(STDOUT,buf,n); } else n0 = 0; } if (FD_ISSET(fd, &readfds)){ if(n = read(fd, buf, BUFSIZE)){ write(STDOUT,buf,n); } else n1 = 0; } } }