#ifndef IO_H #define IO_H #include #include #include #include #include #include int *get_readable(int *fds) { fd_set read_fds; static int readable[10]; memset(readable, 0, sizeof(readable)); FD_ZERO(&read_fds); int max_fd = -1; for (int i = 0; fds[i] != -1; i++) { FD_SET(fds[i], &read_fds); if (fds[i] > max_fd) max_fd = fds[i]; } int ready = select(max_fd + 1, &read_fds, NULL, NULL, NULL); if (ready == -1) { perror("select"); return readable; } int readable_index = 0; readable[readable_index] = -1; for (int i = 0; fds[i] != -1; i++) { if (FD_ISSET(fds[i], &read_fds)) { readable[readable_index] = fds[i]; readable_index++; readable[readable_index] = -1; } } return readable; } void msleep(uint time) { usleep(time * 1000); } char *read_line(int fd, size_t limit) { char *buffer = (char *)malloc(limit + 1); ssize_t length = read(fd, buffer, limit); if (length > 0) { buffer[length] = 0; return buffer; } else if (length == 0) { printf("Child process closed"); } else { perror("read"); } return NULL; } char *write_str(int fd, char *data) { write(fd, data, strlen(data)); } void type(int fd, char *text) { while (*text) { char content[] = {*text, 0}; write(fd, content, strlen(content)); text++; msleep(100); } } #endif