commit 146746ddcfcff087714eb3fbd44eb56fdb4d2a38
Author: rick <rick@gnous.eu>
Date: Tue Dec 6 23:58:15 2022 +0100
add first day
diff --git a/01-cat/Makefile b/01-cat/Makefile
new file mode 100644
index 0000000..3c550fd
--- /dev/null
+++ b/01-cat/Makefile
@@ -0,0 +1,9 @@
+CC = gcc
+CFLAGS = -ansi -pedantic -pedantic-errors -Wall -Werror -Wextra
+SRC = cat.c
+
+all:
+ $(CC) $(CFLAGS) $(SRC) -o cat
+
+clean:
+ rm cat
diff --git a/01-cat/cat.c b/01-cat/cat.c
new file mode 100644
index 0000000..b7abd5c
--- /dev/null
+++ b/01-cat/cat.c
@@ -0,0 +1,56 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+const int BUFF_SIZE = 4096;
+
+int main(int argc, char *argv[])
+{
+ char *buffer, *ptr;
+ int i = 1;
+
+ for (; i < argc; i++)
+ {
+ int fd = open(argv[i], O_RDONLY);
+ int ret, nb_bytes = 1, n;
+
+ if (fd == -1) perror(argv[i]);
+ else
+ {
+ while (nb_bytes > 0)
+ {
+ buffer = (char *) calloc(BUFF_SIZE, sizeof(char));
+ nb_bytes = read(fd, buffer, BUFF_SIZE);
+ if (nb_bytes == -1)
+ {
+ perror(argv[i]);
+ break;
+ }
+
+ ptr = buffer;
+ n = nb_bytes;
+
+ while (n > 0)
+ {
+ ret = write(STDOUT_FILENO, ptr, n);
+ if (ret == -1)
+ {
+ perror(argv[i]);
+ return -1;
+ }
+
+ ptr += ret;
+ n -= ret;
+ }
+
+ free(buffer);
+ }
+
+ close(fd);
+ }
+ }
+
+ return 0;
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0f5339a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,14 @@
+# Calendrier de l'avent des syscall
+
+Du 1er au 24 décembre, on découvre des syscalls. Vous pouvez trouver tous les
+défis sur [le site de l'Operating System Group](https://osg.tuhh.de/Advent/).
+
+Il suffit d'aller dans un dossier et faire `make` pour avoir un exécutable.
+
+## Plus d'informations sur les jours
+
+### 01 - cat
+
+Syscalls utilisés: open, read, write, close.
+
+Il s'agit d'un cat. Il prend en paramètres N fichiers et les affiche.