commit 146746ddcfcff087714eb3fbd44eb56fdb4d2a38 Author: rick 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 +#include +#include +#include +#include + +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.