Ajout du filtre pour l'argument '-o' pour l'aviter totalement.

This commit is contained in:
Lilian Lagroue--Dugo
2026-10-08 12:20:31 +02:00
parent 2f2cfdc541
commit 14badd40e9
4 changed files with 49 additions and 3 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
projet.md *priv.md
build/ build/
+1 -1
View File
@@ -2,4 +2,4 @@ Refonte du projet en une commande C
Détails : Détails :
- Développement solo - Développement solo
- Apprentissage du C via Deepseek V4 Pro (venice.ai) - Apprentissage du C via Deepseek V4/V3.2 + Qwen 3.8 (venice.ai)
+37
View File
@@ -0,0 +1,37 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void) {
pid_t pid = fork();
int status;
if (pid == 0) {
// --- CODE DE L'ENFANT ---
// L'enfant fait un calcul complexe
int a = 15;
int b = 3;
int resultat = a * b; // 45
printf("[Enfant] J'ai calculé %d. Je me termine et je donne ce résultat.\n", resultat);
// exit() tue l'enfant et donne le résultat au système.
// Le système le gardera jusqu'à ce que le parent le récupère.
exit(resultat);
}
else {
// --- CODE DU PARENT ---
// Le parent attend que l'enfant meurt.
waitpid(pid, &status, 0);
// Le parent vérifie si l'enfant est mort normalement
if (WIFEXITED(status)) {
// Il extrait le nombre donné par l'enfant via exit()
int resultat_recupere = WEXITSTATUS(status);
printf("[Parent] J'ai récupéré le résultat de mon enfant : %d\n", resultat_recupere);
}
}
return 0;
}
+10 -1
View File
@@ -28,15 +28,24 @@ int is_crun_option(const char *arg) {
// Dans la signature de la fonction : // Dans la signature de la fonction :
int is_cc_option(const char *arg, int *cc_o_arg) { int is_cc_option(const char *arg, int *cc_o_arg) {
// D'abord vérifier si c'est un -Ox
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
// Cas de -o qu'on refuse
if (strcmp(arg, "-o") == 0) {
printf("Argument '-o' impossible !\n");
return 2; // On l'ignore
}
// D'abord vérifier si c'est un -Ox
if (strcmp(arg, list_O_args[i]) == 0) { if (strcmp(arg, list_O_args[i]) == 0) {
// C'est un -Ox // C'est un -Ox
if (!(*cc_o_arg)) { if (!(*cc_o_arg)) {
// Pas encore de -Ox, on l'accepte // Pas encore de -Ox, on l'accepte
*cc_o_arg = 1; *cc_o_arg = 1;
return 1; // Va dans CC_ARGS return 1; // Va dans CC_ARGS
} }
// Déjà un -Ox, on ne fait rien // Déjà un -Ox, on ne fait rien
return 2; // Ignoré return 2; // Ignoré
} }