#include #include bool cat_file(int fd) { char last = '\0'; char buffer[1024]; while (ssize_t n_read = read(fd, buffer, sizeof(buffer))) { if (n_read == -1) { perror("read"); return false; } write(STDOUT_FILENO, buffer, n_read); last = buffer[n_read - 1]; } if (last != '\n') write(STDOUT_FILENO, "\n", 1); return true; } int main(int argc, char** argv) { int ret = 0; if (argc > 1) { for (int i = 1; i < argc; i++) { int fd = open(argv[i], O_RDONLY); if (fd == -1) { perror(argv[i]); ret = 1; continue; } if (!cat_file(fd)) ret = 1; close(fd); } } else { if (!cat_file(STDIN_FILENO)) ret = 1; } return ret; }