1#include <errno.h> 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5#include <sys/select.h> 6#include <unistd.h> 7 8#include <OS.h> 9 10 11static status_t 12close_fd(void* data) 13{ 14 int fd = *((int*)data); 15 snooze(1000000); 16 close(fd); 17 fprintf(stderr, "fd %d closed\n", fd); 18 return B_OK; 19} 20 21 22int 23main() 24{ 25 int fd = dup(0); 26 27 thread_id thread = spawn_thread(close_fd, "close fd", B_NORMAL_PRIORITY, 28 &fd); 29 resume_thread(thread); 30 31 fd_set readSet; 32 FD_ZERO(&readSet); 33 FD_SET(0, &readSet); 34 FD_SET(fd, &readSet); 35 36 fprintf(stderr, "select({0, %d}, NULL, NULL, NULL) ...\n", fd); 37 int result = select(fd + 1, &readSet, NULL, NULL, NULL); 38 fprintf(stderr, "select(): %d\n", result); 39 40 fprintf(stderr, "fd %d: %s\n", 0, FD_ISSET(0, &readSet) ? "r" : " "); 41 fprintf(stderr, "fd %d: %s\n", fd, FD_ISSET(fd, &readSet) ? "r" : " "); 42 43 return 0; 44} 45