diff --git a/CtrlProc-2021/.vscode/settings.json b/CtrlProc-2021/.vscode/settings.json new file mode 100644 index 0000000..d4a224b --- /dev/null +++ b/CtrlProc-2021/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "ctype.h": "c" + } +} \ No newline at end of file diff --git a/CtrlProc-2021/Exo2/a.out b/CtrlProc-2021/Exo2/a.out new file mode 100755 index 0000000..1cba706 Binary files /dev/null and b/CtrlProc-2021/Exo2/a.out differ diff --git a/CtrlProc-2021/Exo2/pere b/CtrlProc-2021/Exo2/pere new file mode 100755 index 0000000..1cba706 Binary files /dev/null and b/CtrlProc-2021/Exo2/pere differ diff --git a/CtrlProc-2021/Exo2/pere.c b/CtrlProc-2021/Exo2/pere.c new file mode 100644 index 0000000..a13487e --- /dev/null +++ b/CtrlProc-2021/Exo2/pere.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include +#include +#include + +/* Je laisse volontairement cette fonction statique, qui empêche mon programme de fonctionner car je n'ai pas complété l'exercice, elle +aurait normalement servie à afficher le premier processus à avoir terminer grâce aux signaux + +static void first_proc(int sig); + +static void first_proc(int sig){ + switch (sig){ + case SIGUSR1: + printf("Le premier fils a terminé en premier"); + break; + + case SIGUSR2: + printf("Le second fils a terminé en premier"); + break; + + default: + break; + + } +}*/ + +int main(int argc, char *argv[]){ + pid_t pid1, pid2; + + pid1 = fork(); + + pid2 = fork(); + + /* De même que plus haut dans mon programme, il s'agit ici de la gestion d'erreur dans le cas ou ma fonction fonctionnait + + if(signal(SIGUSR1,first_proc) == SIG_ERR) { + perror("Error sig"); + exit(-1); + } + + if(signal(SIGUSR2,first_proc) == SIG_ERR) { + perror("Error sig"); + exit(-1); + } */ + + if(pid1==0) { + printf("Processus père de pid : %d, avec fils1 de pid : %d\n", getpid(), getppid()); + if(execlp("ls", "ls", "-l", NULL) == -1) { + perror("exec"); + exit(-1); + } + } else { + wait(NULL); + } + + printf("\n"); + + if(pid2==0){ + printf("Processus père de pid : %d, avec fils2 de pid : %d\n", getpid(), getppid()); + if(execlp("ps", "ps", "-l", NULL) == -1) { + perror("exec"); + exit(-1); + } + } else { + wait(NULL); + } + + printf("\n"); + + return EXIT_SUCCESS; +} + + + diff --git a/CtrlProc-2021/Exo3/exo3 b/CtrlProc-2021/Exo3/exo3 new file mode 100755 index 0000000..e003cae Binary files /dev/null and b/CtrlProc-2021/Exo3/exo3 differ diff --git a/CtrlProc-2021/Exo3/exo3.c b/CtrlProc-2021/Exo3/exo3.c new file mode 100644 index 0000000..60f1fe9 --- /dev/null +++ b/CtrlProc-2021/Exo3/exo3.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include + +/* Ce programme n'est pas complet : j'arrive à récupérer les chiffres et lettres +sur la sortie standard (sauf la première étrangement) mais je n'ai pas le temps pour le terminer */ + + +int main(int argc, char *argv[]){ + pid_t pid1, pid2; + char a; + int tube[2], l=0, c=0; + + pid1 = fork(); + pid2 = fork(); + + if(pipe (tube) != 0){ + perror("error pipe"); + exit(-1); + } + + if(pid1 == 0){ + printf("Processus père de pid : %d, avec fils1 de pid : %d\n", getpid(), getppid()); + close(tube[1]); + while(read (tube[0], &a, 1) > 0){ + if(isdigit (a)){ + c++; + } else if (isalnum(a)) { + l = l; + } + printf("%d chiffres\n", c); + } + } + else if (pid2 == 0){ + printf("Processus père de pid : %d, avec fils2 de pid : %d\n", getpid(), getppid()); + close(tube[1]); + while(read (tube[0], &a, 1) > 0){ + if(isalnum(a)){ + l++; + } else if (isdigit (a)){ + c = c; + } + printf("%d lettres\n", l); + + } + } + else { + close (tube[0]); + while (read (0, &a, 1) >0) + if (isalnum(a)) + write (tube[1], &a, 1); + + close(tube[1]); + wait(NULL); + } + + + return EXIT_SUCCESS; +} +