1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * File: ipc.c
- * Author: Arthur Brandao
- *
- * Created on 21 décembre 2018
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include "ipc.h"
- /* --- Extern --- */
- ipc_mysh ipc;
- extern int errno;
- /* --- Fonctions publiques --- */
- boolean setup_ipc(char** envp){
- //boolean setup = true;
- //SHM pour variable environnement
- if(!create_shm(&ipc.memoire, SHMCODEMEM, MEM_SIZE)){
- return false;
- }
- //SHM pour gestionnaire variable env
- if(!create_shm(&ipc.gestionnaire, SHMCODEGEST, sizeof(subdiv))){
- return false;
- }
- //Si creation alors on remplie les segments
- printf("Errno %d\n", errno != EEXIST);
- if(errno != EEXIST){
- subdiv* sd = (subdiv*) ipc.gestionnaire.adr;
- char* mem = (char*) ipc.memoire.adr;
- ini_subdiv(sd);
- int i = 0;
- while(envp[i] != NULL){
- add_fdata_subdiv(sd, mem, envp[i]);
- i++;
- }
- }
- //SHM pour variable globale
- if(!create_shm(&ipc.global, SHMCODEGLOB, sizeof(int))){
- return false;
- }
- //Semaphore
- int ini[] = {1, 1, 1};
- if(!create_sem(&ipc.sem, SEMCODE, 3, ini)){
- return false;
- }
- return true;
- }
- boolean end_ipc(){
- //Detache les shm
- if(!unset_shm(&ipc.memoire)){
- return false;
- }
- if(!unset_shm(&ipc.gestionnaire)){
- return false;
- }
- if(!unset_shm(&ipc.global)){
- return false;
- }
- //Tente de supprimer shm
- if(delete_shm(&ipc.global)){
- //Si on est le dernier processus en vie on supprime tous
- if(!delete_shm(&ipc.memoire)){
- return false;
- }
- if(!delete_shm(&ipc.gestionnaire)){
- return false;
- }
- if(!delete_sem(&ipc.sem)){
- return false;
- }
- }
- return true;
- }
|