Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.87 KB | None | 0 0
  1. //head.h
  2. #include <sys/types.h>
  3. #include <sys/ipc.h>
  4. #include <sys/sem.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <sys/shm.h>
  8. #include <sys/wait.h>
  9.  
  10. #include <sys/stat.h>
  11. #include <fcntl.h>
  12. #include <unistd.h>
  13. #include <string.h>
  14.  
  15. #define CHECK(d, str) \
  16. { \
  17. if ((d) == -1) { \
  18. perror(str); \
  19. return -1; \
  20. } \
  21. }
  22.  
  23. typedef struct Data {
  24. int is_asleep;
  25. int n;
  26. int end;
  27.  
  28. } Data;
  29.  
  30. struct sembuf V[5] = {{0, 1, 0}, {1, 1, 0}, {2, 1, 0}, {3, 1, 0}, {4, 1, 0}};
  31. struct sembuf P[5] = {{0, -1, 0}, {1, -1, 0}, {2, -1, 0}, {3, -1, 0}, {4, -1, 0}};
  32. struct sembuf Z = {4, 0, 0};
  33.  
  34. int N = 5;
  35.  
  36. //master.c
  37.  
  38. #include "head.h"
  39.  
  40. int main() {
  41. key_t key = ftok("./master.c", atoi("1234"));
  42. CHECK(key, "ftok");
  43. int id = semget(key, 5, IPC_CREAT | 0644); //mutex, service, sleep, diagnostics
  44. CHECK(id, "semget");
  45. CHECK(semctl(id, 0, SETVAL, 1), "semctl");
  46. CHECK(semctl(id, 1, SETVAL, 1), "semctl");
  47. CHECK(semctl(id, 2, SETVAL, 0), "semctl");
  48. CHECK(semctl(id, 3, SETVAL, 0), "semctl");
  49. CHECK(semctl(id, 4, SETVAL, 20), "semctl");
  50.  
  51. int id1 = shmget(key, sizeof(Data), IPC_CREAT | 0644);
  52. CHECK(id1, "shmget");
  53. Data* data = (Data*)shmat(id1,0,0);
  54. CHECK(*((int*) data), "shmat");
  55. data->n = 0;
  56. data->is_asleep = 1;
  57. data->end = 0;
  58.  
  59. printf("МАСТЕР: Гатов))\n");
  60. while(1) {
  61. if (data->end)
  62. break;
  63. if (data->is_asleep) {
  64. CHECK(semop(id, &P[2], 1), "semop");
  65. data->is_asleep = 0;
  66. printf("МАСТЕР: Проснулся улыбнулся\n");
  67. }
  68. printf("МАСТЕР: Ща как проведу диагностику *агресия*\n");
  69. CHECK(semop(id, &V[3], 1), "semop");
  70. printf("МАСТЕР: Провел, ща занесу в БД *кукурузка*\n");
  71. CHECK(semop(id, &P[0], 1), "semop");
  72. if (--data->n) {
  73. printf("МАСТЕР: Зевнул)0\n");
  74. data->is_asleep = 1;
  75. }
  76. printf("МАСТЕР: Минус раз ты пидарас\n");
  77. CHECK(semop(id, &V[0], 1), "semop");
  78. }
  79. //CHECK(semctl(id, 0, IPC_RMID), "semctl");
  80. //CHECK(shmctl(id1, IPC_RMID, NULL), "shmctl");
  81. return 0;
  82. }
  83.  
  84. //taxis.c
  85. #include "head.h"
  86.  
  87. int main() {
  88. key_t key = ftok("./master.c", atoi("1234"));
  89. CHECK(key, "ftok");
  90. int id = semget(key, 5, 0); //mutex, service, sleep, diagnostics
  91. CHECK(id, "semget");
  92.  
  93. int id1 = shmget(key, sizeof(Data), 0);
  94. CHECK(id1, "shmget");
  95. Data* data = (Data*)shmat(id1,0,0);
  96. CHECK(*((int*) data), "shmat");
  97.  
  98. printf("ДИСПЕЧЕРСКАЯ: Хахаоченьсмешно!! Ща начнем спамить тачамбами\n");
  99. for(int i = 0; i < 20; ++i) {
  100. switch(fork()) {
  101. case -1:
  102. printf("Err пизда\n");
  103. exit(1);
  104. case 0: {
  105. printf("ТАЧКА НОМЕР %d: ЕБАТЬ ПОЕХАЛИ!!!\n", getpid());
  106. CHECK(semop(id, &P[0], 1), "semop");
  107. if (data->n == N) {
  108. CHECK(semop(id, &V[0], 1), "semop");
  109. printf("ТАЧКА НОМЕР %d: Мест нет:(\n", getpid());
  110. CHECK(semop(id, &P[4], 1), "semop");
  111. exit(0);
  112. }
  113. ++data->n;
  114. CHECK(semop(id, &V[0], 1), "semop");
  115. printf("ТАЧКА НОМЕР %d: Ждём качественного сервисa:)\n", getpid());
  116. CHECK(semop(id, &P[1], 1), "semop");
  117. if (data->is_asleep) {
  118. semop(id, &V[2], 1);
  119. printf("ТАЧКА НОМЕР %d: Разбудили пидараса:)))\n", getpid());
  120. }
  121. printf("ТАЧКА НОМЕР %d: Оплатили аэроподсом\n", getpid());
  122. CHECK(semop(id, &P[3], 1), "semop");
  123. CHECK(semop(id, &V[1], 1), "semop");
  124. printf("ТАЧКА НОМЕР %d: Хелло дартнес май олд френд(Гудбай мазерфакерс\n", getpid());
  125. CHECK(semop(id, &P[4], 1), "semop");
  126. exit(0);
  127. }
  128. default:
  129. continue;
  130. }
  131. }
  132. //CHECK(semop(id, &Z, 1), "semop");
  133. //data->end = 1;
  134. return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement