Write a simple UNIX cat clone

This commit is contained in:
Fabio Scotto di Santolo
2025-09-17 17:57:35 +02:00
parent 2abf6dc82f
commit ef8d74ec19
2 changed files with 55 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
CC := gcc
CFLAGS := -Wall -Wextra -pedantic -std=c11 -pthread -g
TARGET := cat
SRC := main.c
OBJS := $(SRC:.c=.o)
.PHONY: all clean valgrind
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(TARGET) $(OBJS)

View File

@@ -0,0 +1,36 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 256
int main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "Usage: %s FILE...\n", argv[0]);
return EXIT_FAILURE;
}
for (int i = 1; i < argc; i++) {
FILE *fp = fopen(argv[i], "r");
if (fp == NULL) {
perror("fopen");
return EXIT_FAILURE;
}
// Read file and print on the stdout
size_t nread;
unsigned char buff[BUFFER_SIZE];
while ((nread = fread(buff, 1, sizeof(buff), fp)) > 0) {
fwrite(buff, 1, nread, stdout);
}
if (fclose(fp) != 0) {
perror("fclose");
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}