diff --git a/bac2/os/chap2/ex5.c b/bac2/os/chap2/ex5.c index 06af55c..f1c2fad 100644 --- a/bac2/os/chap2/ex5.c +++ b/bac2/os/chap2/ex5.c @@ -1,41 +1,44 @@ -#include #include +#include -struct node{ - struct node* prev; +typedef struct Node* LIFO; + +struct Node{ + struct Node* prev; void* data; }; -typedef struct node* LIFO; - -LIFO* mklifo (); -void push(LIFO* lst , void*); -void* pop(LIFO* lst); +LIFO mklifo(); +void push(LIFO*, void*); +void* pop(LIFO*); int main(void) { - char* t = "test"; - LIFO* lifo = mklifo(); - push(lifo, t); - printf("%s", (char *)pop(lifo)); - + int a = 5; + int b = 12; + LIFO lifo = mklifo(); + + push(&lifo, &a); + push(&lifo, &b); + int *c = pop(&lifo); + int *d = pop(&lifo); + + printf("%d\n", *c); + printf("%d\n", *d); } -LIFO *mklifo (){ - LIFO* ret = malloc(sizeof(struct node)); - return ret; +LIFO mklifo(){ + return calloc(1, sizeof(struct Node)); } -void push(LIFO *lst , void *el){ - LIFO* next = mklifo(); +void push(LIFO* lst, void* el){ + LIFO next = mklifo(); (*lst)->data = el; - (*next)->prev = *lst; - lst = next; + next->prev = *lst; + *lst = next; } -void *pop(LIFO *lst){ - void* el; - (*lst)->data = el; +void *pop(LIFO* lst){ *lst = (*lst)->prev; - return el; + return (*lst)->data; } diff --git a/bac2/os/chap2/ex5.o b/bac2/os/chap2/ex5.o index 77ac7fe..025a4bd 100644 Binary files a/bac2/os/chap2/ex5.o and b/bac2/os/chap2/ex5.o differ diff --git a/bac2/os/chap2/ex6.c b/bac2/os/chap2/ex6.c new file mode 100644 index 0000000..d896d87 --- /dev/null +++ b/bac2/os/chap2/ex6.c @@ -0,0 +1,53 @@ +#include +#include + + +typedef struct node{ + void* data; + struct node* next; +} NODE; + +//Could be only head but it allows a complexity of O(1) instead of O(n) for insertion (where n would be the size of the chain) +typedef struct { + NODE* head; + NODE* tail; +} FIFO; + +FIFO mkfifo (); +void enqueue(FIFO *lst ,void* el); +void* dequeue(FIFO *lst); + +int main(void) +{ + int a = 5; + int b = 12; + FIFO fifo = mkfifo(); + + enqueue(&fifo, &a); + enqueue(&fifo, &b); + int *c = dequeue(&fifo); + int *d = dequeue(&fifo); + + printf("%d\n", *c); + printf("%d\n", *d); + +} + +FIFO mkfifo (){ + return (FIFO) {NULL, NULL}; +} + +void enqueue(FIFO *lst ,void *el){ + NODE *new = calloc(1, sizeof(NODE)); + new->data = el; + if(lst->tail != NULL) + lst->tail->next = new; + lst->tail = new; + lst->head = lst->head == NULL ? new : lst->head; +} + +void* dequeue(FIFO *lst){ + void* ret = lst->head->data; + lst->head = lst->head->next; + return ret; +} diff --git a/bac2/pgl/detail_ext_indi/ext_indi.tex b/bac2/pgl/detail_ext_indi/ext_indi.tex new file mode 100644 index 0000000..3501605 --- /dev/null +++ b/bac2/pgl/detail_ext_indi/ext_indi.tex @@ -0,0 +1,85 @@ +\documentclass{article} + +\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} + +\author{Debucquoy Anthony} +\title{Description du choix d'extension individiuelle - Messagerie} +\date{Octobre 2023} + +\begin{document} + +\maketitle +\newpage +\tableofcontents +\newpage + + +\section{Objectifs fixés par le projet} +Les éléments suivants sont ceux imposés par les consignes du projet. +\begin{enumerate} + \item Envois de messages d'étudiants à professeurs pour fixer un rendez-vous + \begin{itemize} + \item Proposition d'une ou plusieurs tranches de temps + \item validation ou refus d'une tranche de temps par le professeur + \item possibilité de laisser une note supplémentaire + \item export au format \verb|.ical| du rendez-vous + \end{itemize} + \item Création d'un forum de discussion lié au cours + \begin{itemize} + \item Abonnement automatique de tous les étudiants + \item Possibilité pour le professeur de poser un message + \item Possibilité de répondre à un message par les étudiants + \end{itemize} + \item Création de groupes de communication entre utilisateurs pour envois de messages +\end{enumerate} + +\section{Objectifs supplémentaires} +Ces éléments sont ceux que je souhaiterais ajouter au projet qui ne sont pas requis. +Cette liste peut évoluer au fil du temps. +Dans ce cas, j'aimerais implémenter ces points ci-dessous au minimum. +\begin{enumerate} + \item Possibilité de générer un poll dans un post sur un forum + \begin{itemize} + \item Multi-choix ou simple-choix + \end{itemize} + \item Réponse à un post par un étudiant en mode 'privé' ou 'public' + \item Chiffrement de messages privés + \item Affichage du statut envoyé/vu/non-vu pour un message et pour un post +\end{enumerate} + +\section{Réalisation} + +\subsection{Rendez-vous} + +Pour prendre un rendez-vous, je souhaite éviter que le planning du professeur soit mis à découvert +par ce système. De ce fait, par défaut, aucune plage horaire ne sera disponible pour un professeur. + +Le professeur doit explicitement mettre ses disponibilités dans le système. +Un étudiant mal intentionné ne pourrait alors pas utiliser la plateforme pour savoir quand le professeur +est dans son bureau où quand il ne l'est pas. + +\subsection{Forum de discussion} + +Il sera possible de répondre à un post d'un professeur en mode 'privé'. Grâce à ça, +un étudiant peut poser des questions à un professeur sans risquer de se faire copier par +les autres utilisateurs + +\subsection{Messages privés} + +Je souhaite que les messages entre utilisateurs ne soient pas lisibles par un potentiel administrateur +système. Le chiffrement des messages de manière robuste (par les standards actuels) est important. +J'apprécierais qu'il soit possible de chiffrer soi-même les messages à l'aide de GPG mais +et que le chiffrement se fasse donc coté client. +Le serveur n'aurait en aucuns cas la possibilité de déchiffrer les messages + +\section{Conclusion} + +Comme vous pouvez le voir à travers mes objectifs, je souhaite que mon extension soit dirigée par un +développement avec la sécurité des utilisateurs et de leurs données en tête +Le but serait qu'un utilisateur ne puisse pas profiter d'une fonctionnalité du site comme une manière +d'obtenir des informations sur un utilisateur que ça soit une personne avec des privilèges (sysadmin) ou non. + +\end{document} +