ipc.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * File: ipc.c
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 21 décembre 2018
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <errno.h>
  10. #include "ipc.h"
  11. /* --- Extern --- */
  12. ipc_mysh ipc;
  13. extern int errno;
  14. /* --- Fonctions publiques --- */
  15. boolean setup_ipc(char** envp){
  16. //boolean setup = true;
  17. //SHM pour variable environnement
  18. if(!create_shm(&ipc.memoire, SHMCODEMEM, MEM_SIZE)){
  19. return false;
  20. }
  21. //SHM pour gestionnaire variable env
  22. if(!create_shm(&ipc.gestionnaire, SHMCODEGEST, sizeof(subdiv))){
  23. return false;
  24. }
  25. //Si creation alors on remplie les segments
  26. if(errno != EEXIST){
  27. subdiv* sd = (subdiv*) ipc.gestionnaire.adr;
  28. char* mem = (char*) ipc.memoire.adr;
  29. int* nb = (int*) ipc.global.adr;
  30. ini_subdiv(sd);
  31. int i = 0;
  32. while(envp[i] != NULL){
  33. add_fdata_subdiv(sd, mem, envp[i]);
  34. i++;
  35. }
  36. *nb = 0;
  37. }
  38. //SHM pour variable globale
  39. if(!create_shm(&ipc.global, SHMCODEGLOB, sizeof(int))){
  40. return false;
  41. }
  42. //Semaphore
  43. int ini[] = {1, 1, 1};
  44. if(!create_sem(&ipc.sem, SEMCODE, 3, ini)){
  45. return false;
  46. }
  47. return true;
  48. }
  49. boolean end_ipc(){
  50. //Detache les shm
  51. if(!unset_shm(&ipc.memoire)){
  52. return false;
  53. }
  54. if(!unset_shm(&ipc.gestionnaire)){
  55. return false;
  56. }
  57. if(!unset_shm(&ipc.global)){
  58. return false;
  59. }
  60. //Tente de supprimer shm
  61. if(delete_shm(&ipc.global)){
  62. //Si on est le dernier processus en vie on supprime tous
  63. if(!delete_shm(&ipc.memoire)){
  64. return false;
  65. }
  66. if(!delete_shm(&ipc.gestionnaire)){
  67. return false;
  68. }
  69. if(!delete_sem(&ipc.sem)){
  70. return false;
  71. }
  72. }
  73. return true;
  74. }