From 5b8789f58814afc478a2fd1ba48a2ff560a9471d Mon Sep 17 00:00:00 2001 From: iliya <iliya.saroukha@hes-so.ch> Date: Wed, 25 Oct 2023 18:15:10 +0200 Subject: [PATCH] feat: final exercise of serie 2 --- processus/serie2/ex4/.gitignore | 2 ++ processus/serie2/ex4/Makefile | 24 ++++++++++++++++++++++++ processus/serie2/ex4/ex4.md | 24 ++++++++++++++++++++++++ processus/serie2/ex4/prog.c | 11 +++++++++++ 4 files changed, 61 insertions(+) create mode 100644 processus/serie2/ex4/.gitignore create mode 100644 processus/serie2/ex4/Makefile create mode 100644 processus/serie2/ex4/ex4.md create mode 100644 processus/serie2/ex4/prog.c diff --git a/processus/serie2/ex4/.gitignore b/processus/serie2/ex4/.gitignore new file mode 100644 index 0000000..b6de771 --- /dev/null +++ b/processus/serie2/ex4/.gitignore @@ -0,0 +1,2 @@ +*.o +prog diff --git a/processus/serie2/ex4/Makefile b/processus/serie2/ex4/Makefile new file mode 100644 index 0000000..df35d63 --- /dev/null +++ b/processus/serie2/ex4/Makefile @@ -0,0 +1,24 @@ +CC := clang +CFLAGS := -g -pedantic -Wall -Wextra -std=c11 +LDFLAGS := -fsanitize=address -fsanitize=leak -fsanitize=undefined -lm -lpthread +TARGET := prog + +all: $(TARGET) + +$(TARGET): prog.o + @printf "=================== Building executable ===================\n" + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +%.o: %.c + @printf "=================== Building sources ===================\n" + $(CC) $(CFLAGS) -c $< + +.PHONY: clean + +clean: + @printf "=================== Cleaning up... ===================\n" + rm -f *.o $(TARGET) + +.PHONY: rebuild + +rebuild: clean all diff --git a/processus/serie2/ex4/ex4.md b/processus/serie2/ex4/ex4.md new file mode 100644 index 0000000..9fdbbd5 --- /dev/null +++ b/processus/serie2/ex4/ex4.md @@ -0,0 +1,24 @@ +# Exercice 4 + +Soit le code : +```c +int main(int argc, char *argv[]) { + printf("Hello world!"); + execlp("sleep", "sleep", "0", (char *)NULL); +} +``` + +- Expliquez de manière détaillée pourquoi quand on exécute le programme ci-dessus, rien n’est affiché. + - La raison pour laquelle rien ne s'affiche lors de l'exécution du programme + est parce que le buffer de `stdout` ne jamais flushé par un retour à la ligne + `\n`. + +- Comment changer le code de manière minimale afin d’obtenir l’affichage attendu “Hello world!” ? + - Unique modification dans le code est le retour à la ligne explicite lors + de l'appel explicite à `printf()` + ```c + int main(int argc, char *argv[]) { + printf("Hello world!\n"); + execlp("sleep", "sleep", "0", (char *)NULL); + } + ``` diff --git a/processus/serie2/ex4/prog.c b/processus/serie2/ex4/prog.c new file mode 100644 index 0000000..2194efd --- /dev/null +++ b/processus/serie2/ex4/prog.c @@ -0,0 +1,11 @@ +#include <libgen.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + printf("Hello world!\n"); + execlp("sleep", "sleep", "0", (char *)NULL); +} -- GitLab