Controle machine ASR
This commit is contained in:
parent
9d36a2a75a
commit
2c76beb685
5
CtrlProc-2021/.vscode/settings.json
vendored
Normal file
5
CtrlProc-2021/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"ctype.h": "c"
|
||||||
|
}
|
||||||
|
}
|
BIN
CtrlProc-2021/Exo2/a.out
Executable file
BIN
CtrlProc-2021/Exo2/a.out
Executable file
Binary file not shown.
BIN
CtrlProc-2021/Exo2/pere
Executable file
BIN
CtrlProc-2021/Exo2/pere
Executable file
Binary file not shown.
77
CtrlProc-2021/Exo2/pere.c
Normal file
77
CtrlProc-2021/Exo2/pere.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
CtrlProc-2021/Exo3/exo3
Executable file
BIN
CtrlProc-2021/Exo3/exo3
Executable file
Binary file not shown.
63
CtrlProc-2021/Exo3/exo3.c
Normal file
63
CtrlProc-2021/Exo3/exo3.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user