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