Viewing: cat.c
📄 cat.c (Read Only) ⬅ To go back
/* AdrOS cat utility */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

static void cat_fd(int fd) {
    char buf[4096];
    int r;
    while ((r = read(fd, buf, sizeof(buf))) > 0) {
        write(STDOUT_FILENO, buf, (size_t)r);
    }
}

int main(int argc, char** argv) {
    if (argc <= 1) {
        cat_fd(STDIN_FILENO);
        return 0;
    }

    int rc = 0;
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i], "-") == 0) {
            cat_fd(STDIN_FILENO);
            continue;
        }
        int fd = open(argv[i], O_RDONLY);
        if (fd < 0) {
            fprintf(stderr, "cat: %s: No such file or directory\n", argv[i]);
            rc = 1;
            continue;
        }
        cat_fd(fd);
        close(fd);
    }
    return rc;
}