From fc1044daf51f32b9d85f8497e4e0bd5a3c1e7fe9 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Wed, 25 Nov 2009 10:52:15 +0200 Subject: libtf: implement basic file i/o with epoll some scetching of i/o api, and implement basic read and write functionality. integrate polling to scheduler and an epoll based polling mechanism. --- test/read.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/read.c (limited to 'test/read.c') diff --git a/test/read.c b/test/read.c new file mode 100644 index 0000000..1921609 --- /dev/null +++ b/test/read.c @@ -0,0 +1,44 @@ +/* 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); +} -- cgit v1.2.3