#include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > #include < unistd.h > #include < stdio.h > static int cat(int fd, char *file) { ssize_t n; char buf[4096]; while ((n = read(fd, buf, sizeof buf)) > 0){ if(write(1, buf, n) < 0){ perror("write"); return 1; } } if (n < 0){ perror(file); return 1; } return 0; } int main(int argc, char **argv) { int i; int fd; int err = 0; if (argc <= 1){ return cat(0, "stdin"); } for (i = 1; i < argc; i++){ if ((fd = open(argv[i], O_RDONLY)) < 0){ perror(argv[i]); err = 1; continue; } err != cat(fd, argv[i]); if (close(fd) < 0){ perror(argv[i]); err = 1; } } return err; }