pavone@794: #include pavone@794: #include pavone@794: #include pavone@794: #include pavone@794: #include pavone@794: #include "terminal.h" pavone@794: pavone@794: char buf[4096]; pavone@794: pavone@794: void copy_data(int to, int from) pavone@794: { pavone@794: ssize_t bytes = read(from, buf, sizeof(buf)); pavone@794: while (bytes > 0) pavone@794: { pavone@794: ssize_t written = write(to, buf, bytes); pavone@794: if (written == -1) { pavone@794: exit(1); pavone@794: } pavone@794: bytes -= written; pavone@794: } pavone@794: } pavone@794: pavone@794: int main(int argc, char **argv) pavone@794: { pavone@794: //these will block so order is important pavone@794: int input_fd = open(INPUT_PATH, O_WRONLY); pavone@794: int output_fd = open(OUTPUT_PATH, O_RDONLY); pavone@794: fd_set read_fds; pavone@794: FD_ZERO(&read_fds); pavone@794: for (;;) pavone@794: { pavone@794: FD_SET(STDIN_FILENO, &read_fds); pavone@794: FD_SET(output_fd, &read_fds); pavone@794: select(output_fd+1, &read_fds, NULL, NULL, NULL); pavone@794: pavone@794: if (FD_ISSET(STDIN_FILENO, &read_fds)) { pavone@794: copy_data(input_fd, STDIN_FILENO); pavone@794: } pavone@794: if (FD_ISSET(output_fd, &read_fds)) { pavone@794: copy_data(STDOUT_FILENO, output_fd); pavone@794: } pavone@794: } pavone@794: return 0; pavone@794: }