/* 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, TF_FD_STREAM_ORIENTED); while (1) { if (tf_read_fully(&fin, data, sizeof(data)) < 0) break; printf("Read: %8.8s\n", data); } printf("Exiting io fiber\n"); tf_close(&fin); } int main(int argc, char **argv) { tf_vmach_start(); tf_fiber_run(tf_fiber_create(time_fiber, 0)); tf_fiber_run(tf_fiber_create(io_fiber, 0)); tf_vmach_stop(); }