/* Read from stdin and have an active fiber in the background. * Stdin needs to be redirected to FIFO or similar; mixing * console and non-blocking I/O is not a good idea. */ #include #include #include static void time_fiber(void *ptr) { while (1) { printf("Tick\n"); tf_msleep(1000); printf("Tack\n"); tf_msleep(1000); } } static void io_fiber(void *ptr) { char data[8]; struct tf_fd fin; tf_open_fd(&fin, STDIN_FILENO); while (1) { if (tf_read(&fin, data, sizeof(data), TF_INFINITE) < 0) break; printf("Read: %8.8s\n", data); } printf("Exiting io fiber\n"); tf_close(&fin); } static void init_fiber(void *ptr) { tf_fiber_put(tf_fiber_create(time_fiber, 0)); tf_fiber_put(tf_fiber_create(io_fiber, 0)); } int main(int argc, char **argv) { return tf_main(init_fiber); }