From 1c993ece2d7c218af39300094bbc07cd5bbfde24 Mon Sep 17 00:00:00 2001 From: Ronan Fourneuve <65066876+ronanfrnv@users.noreply.github.com> Date: Fri, 8 Aug 2025 09:54:34 +0200 Subject: [PATCH] first commit --- ANALE-1/SUJET/Makefile | 19 ++++++++++++++ ANALE-1/SUJET/commun.h | 4 +++ ANALE-1/SUJET/dijkstra.c | 57 ++++++++++++++++++++++++++++++++++++++++ ANALE-1/SUJET/dijkstra.h | 27 +++++++++++++++++++ ANALE-1/SUJET/launcher.c | 27 +++++++++++++++++++ ANALE-1/SUJET/p1.c | 26 ++++++++++++++++++ ANALE-1/SUJET/p2.c | 18 +++++++++++++ ANALE-1/SUJET/p3.c | 18 +++++++++++++ 8 files changed, 196 insertions(+) create mode 100644 ANALE-1/SUJET/Makefile create mode 100644 ANALE-1/SUJET/commun.h create mode 100644 ANALE-1/SUJET/dijkstra.c create mode 100644 ANALE-1/SUJET/dijkstra.h create mode 100644 ANALE-1/SUJET/launcher.c create mode 100644 ANALE-1/SUJET/p1.c create mode 100644 ANALE-1/SUJET/p2.c create mode 100644 ANALE-1/SUJET/p3.c diff --git a/ANALE-1/SUJET/Makefile b/ANALE-1/SUJET/Makefile new file mode 100644 index 0000000..097fdb0 --- /dev/null +++ b/ANALE-1/SUJET/Makefile @@ -0,0 +1,19 @@ +CFLAGS=-Wall -Wextra -g +OBJS=p1.o p2.o p3.o dijkstra.o launcher.o +all: p1 p2 p3 launcher + +p1: p1.o dijkstra.o +p2: p2.o dijkstra.o +p3: p3.o dijkstra.o +launcher: launcher.o dijkstra.o + +p1.o: p1.c dijkstra.h commun.h +p2.o: p2.c dijkstra.h commun.h +p3.o: p3.c dijkstra.h commun.h +launcher.o: launcher.c dijkstra.h commun.h +dijkstra.o: dijkstra.c dijkstra.h + +.PHONY: clean +clean: + rm $(OBJS) p1 p2 p3 launcher + diff --git a/ANALE-1/SUJET/commun.h b/ANALE-1/SUJET/commun.h new file mode 100644 index 0000000..6b6019b --- /dev/null +++ b/ANALE-1/SUJET/commun.h @@ -0,0 +1,4 @@ +#ifndef COMMUN_H +#define COMMUN_H + +#endif diff --git a/ANALE-1/SUJET/dijkstra.c b/ANALE-1/SUJET/dijkstra.c new file mode 100644 index 0000000..135570d --- /dev/null +++ b/ANALE-1/SUJET/dijkstra.c @@ -0,0 +1,57 @@ +#include +#include +#include + +#include "dijkstra.h" + +int sem_create(key_t cle, int initval) { + int semid; + union semun { int val; struct semid_ds *buf; ushort *array; } arg_ctl; + + semid = semget(cle, 1 , IPC_CREAT|IPC_EXCL|0666); + if (semid == -1) + { + semid = semget(cle,1, 0666); + if (semid == -1) + { + perror("Erreur semget()"); + exit(1); + } + } + else + { + arg_ctl.val = initval; + if (semctl(semid, 0, SETVAL, arg_ctl) == -1) + { + perror("Erreur initialisation sémaphore"); + exit(1); + } + } + return(semid) ; +} + +void P(int semid) +{ + struct sembuf sempar; + sempar.sem_num = 0; + sempar.sem_op = -1; + sempar.sem_flg = 0; + if (semop(semid, &sempar, 1) == -1) + perror("Erreur operation P"); +} + +void V(int semid) +{ + struct sembuf sempar; + sempar.sem_num = 0; + sempar.sem_op = 1; + sempar.sem_flg = 0; + if (semop(semid, &sempar, 1) == -1) + perror("Erreur opération V"); +} + +void sem_delete(int semid) +{ + if (semctl(semid,0,IPC_RMID,0) == -1) + perror("Erreur dans destruction sémaphore"); +} diff --git a/ANALE-1/SUJET/dijkstra.h b/ANALE-1/SUJET/dijkstra.h new file mode 100644 index 0000000..25abaef --- /dev/null +++ b/ANALE-1/SUJET/dijkstra.h @@ -0,0 +1,27 @@ +#ifndef DIJKSTRA_H +#define DIJKSTRA_H + +#include + +/** + * return the semaphore associated to the key cle + * if the semaphore doesn't already exist the function create it with initval token then return it + */ +int sem_create(key_t cle, int initval); + +/** + * take a token on the semaphore semid or wait if none available + */ +void P(int semid); + +/** + * put a token on the semaphore semid + */ +void V(int semid); + +/** + * delete the semaphore semid + */ +void sem_delete(int semid); + +#endif diff --git a/ANALE-1/SUJET/launcher.c b/ANALE-1/SUJET/launcher.c new file mode 100644 index 0000000..02193ab --- /dev/null +++ b/ANALE-1/SUJET/launcher.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include +#include +#include +#include "dijkstra.h" +#include "commun.h" + +int main () { + if (fork() == 0) + { + execlp("./p1","./p2",NULL); + } + if (fork() == 0) + { + execlp("./p2","./p2",NULL); + } + if (fork() == 0) + { + execlp("./p3","./p3",NULL); + } + wait(NULL); + wait(NULL); + wait(NULL); + return 0; +} diff --git a/ANALE-1/SUJET/p1.c b/ANALE-1/SUJET/p1.c new file mode 100644 index 0000000..a9b8a1e --- /dev/null +++ b/ANALE-1/SUJET/p1.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include "dijkstra.h" +#include "commun.h" + +void t1() +{ + puts("t1"); + sleep(10); + puts("end t1"); +} + +void t2() +{ + puts("t2"); + sleep(2); + puts("end t2"); +} + +int main () { + t1(); + t2(); + return 0; +} diff --git a/ANALE-1/SUJET/p2.c b/ANALE-1/SUJET/p2.c new file mode 100644 index 0000000..7e0597c --- /dev/null +++ b/ANALE-1/SUJET/p2.c @@ -0,0 +1,18 @@ +#include +#include +#include +#include +#include "dijkstra.h" +#include "commun.h" + +void t3() +{ + puts("t3"); + sleep(7); + puts("end t3"); +} + +int main () { + t3(); + return 0; +} diff --git a/ANALE-1/SUJET/p3.c b/ANALE-1/SUJET/p3.c new file mode 100644 index 0000000..e4b5973 --- /dev/null +++ b/ANALE-1/SUJET/p3.c @@ -0,0 +1,18 @@ +#include +#include +#include +#include +#include "dijkstra.h" +#include "commun.h" + +void t4() +{ + puts("t4"); + sleep(5); + puts("end t4"); +} + +int main () { + t4(); + return 0; +}