Advertisement
AJBF

Memoria Compartida - Perez Facundo - Final

May 3rd, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #include <sys/shm.h>
  2. #include <unistd.h>
  3. #include <sys/stat.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <wait.h>
  8. #include <fcntl.h>
  9. #include<sys/ipc.h>
  10.  
  11. int main ()
  12. {
  13. key_t Clave;
  14. int Id_Memoria;
  15. int * Memoria;
  16. int aux;
  17. int maxNum = 10;
  18. int pid1, pid2;
  19.  
  20. Clave = ftok ("/bin/ls", 33);
  21. if (Clave == -1)
  22. {
  23. printf("Error, no existe la clave\n");
  24. exit(EXIT_FAILURE);
  25. }
  26.  
  27. Id_Memoria = shmget (Clave, sizeof(int)*100, 0777 | IPC_CREAT);
  28. if (Id_Memoria == -1)
  29. {
  30. printf("Error, no existe el ID para la memoria\n");
  31. exit(EXIT_FAILURE);
  32. }
  33.  
  34. Memoria = shmat (Id_Memoria, 0, 0);
  35.  
  36. if (Memoria < 0)
  37. {
  38. printf("Error, no existe la memoria compartida\n");
  39. exit(EXIT_FAILURE);
  40. }
  41.  
  42. *Memoria = 0;
  43. shmdt(Memoria);
  44.  
  45. printf("fin primera etapa\n");
  46.  
  47. pid1 = fork();
  48.  
  49. if(pid1 == -1)
  50. {
  51. printf("ERROR\n");
  52. exit(EXIT_FAILURE);
  53. }
  54.  
  55. if (pid1 == 0)
  56. {
  57. printf("Soy H1, mi PID: %d\n Mi padre es: %d\n", getpid(), getppid());
  58. Memoria = shmat (Id_Memoria, 0, 0);
  59. if (Memoria < 0)
  60. {
  61. printf("Error no se consigue la memoria compartida\n");
  62. exit(EXIT_FAILURE);
  63. }
  64.  
  65. while (*Memoria <= maxNum)
  66. {
  67. aux=*Memoria;
  68. if ((aux%2) == 0)
  69. {
  70. aux++;
  71. if (aux <= maxNum)
  72. printf("%d\n", aux);
  73. *Memoria = aux;
  74. }
  75. }
  76.  
  77. shmdt (Memoria);
  78. exit(EXIT_SUCCESS);
  79. }
  80. else
  81. {
  82. pid2 = fork();
  83. if(pid2 == -1)
  84. {
  85. printf("ERROR\n");
  86. exit(EXIT_FAILURE);
  87. }
  88.  
  89. if (pid2 == 0)
  90. {
  91. Memoria = shmat (Id_Memoria, 0, 0);
  92. if (Memoria < 0)
  93. {
  94. printf("Error, no existe la memoria compartida\n");
  95. exit(EXIT_FAILURE);
  96. }
  97.  
  98. while (*Memoria <= maxNum)
  99. {
  100. aux=*Memoria;
  101. if ((aux%2) == 1)
  102. {
  103. aux++;
  104. if (aux <= maxNum)
  105. printf("%d\n", aux);
  106. *Memoria = aux;
  107. }
  108. }
  109. shmdt (Memoria);
  110. printf("Soy H2, mi PID: %d\n Mi padre es: %d\n", getpid(), getppid());
  111. exit(EXIT_SUCCESS);
  112. }
  113. exit(EXIT_SUCCESS);
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement