diff --git a/processus/serie2/ex4/.gitignore b/processus/serie2/ex4/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b6de771d2fff3a218dbc1b3de5b6b6cc1dc54e08 --- /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 0000000000000000000000000000000000000000..df35d6384b9e9f177057b82986b6a1858455e9da --- /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 0000000000000000000000000000000000000000..9fdbbd5a32810ca62c48cf8e7ebbd35000e44be2 --- /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 0000000000000000000000000000000000000000..2194efd989caaededc70dd5ea7bd3f20dc698cde --- /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); +}