Advertisement
jaimolias

Untitled

Apr 10th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<sys/mman.h>
  4. #include<sys/stat.h>
  5. #include<fcntl.h>
  6. #include<unistd.h>
  7. #include<sys/types.h>
  8. #include <sys/stat.h>
  9. #include <sys/wait.h>
  10. #include <time.h>
  11. #include <math.h>
  12. #include <string.h>
  13. #include <mqueue.h>
  14. #include <semaphore.h>
  15. #define SEM "/sem"
  16. #define SEM2 "/sem2"
  17. typedef struct {
  18. int valor;
  19. char aviso[80];
  20. } Mensaje;
  21.  
  22. int main(int argc, char** argv) {
  23. struct mq_attr attributes = {
  24. .mq_flags = 0,
  25. .mq_maxmsg = 10,
  26. .mq_curmsgs = 0,
  27. .mq_msgsize = sizeof(Mensaje)
  28. };
  29. pid_t pid = 1;
  30. int i, id = 5;
  31. char nombreCola1[80];
  32. char nombreCola2[80];
  33. char nombreFich[80];
  34. sem_t *sem, *sem2;
  35. int sval;
  36. strcpy(nombreCola1, argv[1]);
  37. strcpy(nombreCola2, argv[2]);
  38. strcpy(nombreFich, argv[3]);
  39.  
  40.  
  41. if ((sem = sem_open(SEM, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0)) == SEM_FAILED) {
  42. perror("sem_open");
  43. exit(EXIT_FAILURE);
  44. }
  45.  
  46. if ((sem2 = sem_open(SEM2, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0)) == SEM_FAILED) {
  47. perror("sem_open");
  48. exit(EXIT_FAILURE);
  49. }
  50.  
  51. mqd_t queue = mq_open(nombreCola1,O_CREAT | O_RDONLY,S_IRUSR | S_IWUSR,&attributes);
  52. if(queue == (mqd_t)-1)
  53. {
  54. fprintf (stderr, "Error opening the queue\n");
  55. return EXIT_FAILURE;
  56. }
  57.  
  58. mqd_t queue2 = mq_open(nombreCola2,O_CREAT | O_RDONLY,S_IRUSR | S_IWUSR,&attributes);
  59. if(queue == (mqd_t)-1)
  60. {
  61. fprintf (stderr, "Error opening the queue\n");
  62. return EXIT_FAILURE;
  63. }
  64.  
  65. for (i = 0; i < 3; i++) {/*bucle que crea N_READ hijos*/
  66. if (pid) {
  67. pid = fork();
  68. if (pid == 0)
  69. id = i;
  70. }
  71. }
  72.  
  73. if(pid == 0 ) {
  74.  
  75. if(id == 0){
  76.  
  77. execl("./ejA","./ejA",argv[3],argv[1],NULL);
  78. sem_getvalue(sem, &sval);
  79.  
  80. exit(EXIT_SUCCESS);
  81.  
  82. }
  83.  
  84. if(id == 1){
  85.  
  86.  
  87. sem_wait(sem);
  88.  
  89. execl("./ejB","./ejB",argv[1],argv[2],NULL);
  90.  
  91. exit(EXIT_SUCCESS);
  92. }
  93.  
  94. if(id == 2){
  95.  
  96. sem_wait(sem2);
  97. execl("./ejC","./ejC",argv[2],NULL);
  98.  
  99. exit(EXIT_SUCCESS);
  100. }
  101. }
  102. if(pid != 0 && id == 5) {
  103. for(i=0;i<3;i++)
  104. wait(NULL);
  105.  
  106.  
  107. mq_close(queue);
  108. mq_unlink(argv[1]);
  109.  
  110. mq_close(queue2);
  111. mq_unlink(argv[2]);
  112.  
  113. sem_close(sem);
  114. sem_unlink(SEM);
  115. sem_close(sem2);
  116. sem_unlink(SEM2);
  117.  
  118. exit(EXIT_SUCCESS);
  119. }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement