Advertisement
Guest User

opre lel

a guest
Dec 12th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <string.h>
  6. #include <sys/wait.h>
  7. #include <time.h>
  8. #include <sys/ipc.h>
  9. #include <sys/shm.h>
  10.  
  11. #define SIG_NOT_ACCEPTED SIGUSR2
  12. #define SIG_ACCEPTED SIGUSR1
  13.  
  14. int cso[2];
  15. int cso_to_temavez[2];
  16. int waitforsignal = 1;
  17. int pidofhalgato;
  18. struct data {
  19. char halgato_neve[256];
  20. char temavezeto_neve[256];
  21. int beadas_eve;
  22. };
  23.  
  24. void neptun_signal_handler(int sig) {
  25. if (sig == SIG_NOT_ACCEPTED) {
  26. key_t key = ftok("asd.k",65);
  27. int shmid = shmget(key,1024,0666|IPC_CREAT);
  28. char *str = (char*) shmat(shmid,(void*)0,0);
  29. strcpy( str, "nem Illes");
  30. //osztott memoria létrehozása és beleirása
  31. //nincs elfogadva
  32. }
  33. kill(pidofhalgato, sig);
  34. }
  35.  
  36. void hallgato_signal_handler(int sig) {
  37. if (sig == SIG_ACCEPTED) {
  38. printf("hallgato: elfogadva\n");
  39. }else if (sig == SIG_NOT_ACCEPTED) {
  40. printf("hallgato: Nem elfogadva\n");
  41. key_t key = ftok("asd.k",65);
  42. int shmid = shmget(key,1024,0666|IPC_CREAT);
  43. char *str = (char*) shmat(shmid,(void*)0,0);
  44. srand(time(0));
  45. int random = (rand() % 100)+1;
  46. if(random % 2 == 0) {
  47. printf("hallgato: choosed %s \n",str);
  48. } else {
  49. printf("hallgato: choosed teljesen mas tanar\n");
  50. }
  51.  
  52. //nincs elfogadva
  53. }
  54. waitforsignal = 0;
  55. }
  56.  
  57. int main() {
  58.  
  59. if (pipe(cso)==-1)
  60. {
  61. fprintf(stderr, "Pipe Failed" );
  62. return 1;
  63. }
  64. //cso letrehozva
  65.  
  66. if (pipe(cso_to_temavez)==-1)
  67. {
  68. fprintf(stderr, "Pipe Failed" );
  69. return 1;
  70. }
  71. pidofhalgato = fork();
  72. if (pidofhalgato == 0) {
  73. //gyerek
  74. struct data adatom;
  75. adatom.beadas_eve = 2019;
  76.  
  77. strcpy( adatom.halgato_neve, "komaromi richard");
  78. strcpy( adatom.temavezeto_neve, "Illes");
  79. //printf("hallgato: elkuldott %s %s %d\n", adatom.halgato_neve, adatom.temavezeto_neve, adatom.beadas_eve);
  80. write(cso[1],&adatom, sizeof(struct data));
  81. signal(SIG_ACCEPTED, hallgato_signal_handler);
  82. signal(SIG_NOT_ACCEPTED, hallgato_signal_handler);
  83. while(waitforsignal==1) {
  84.  
  85. }
  86. printf("hallgato: befejezem\n");
  87.  
  88.  
  89. } else {
  90. int pidofTemavezeto = fork();
  91. if (pidofTemavezeto == 0 ) {
  92. //temavezto
  93. struct data kapott;
  94. read(cso_to_temavez[0], &kapott, sizeof(struct data));
  95. printf("temavezto: kapott %s %s %d \n", kapott.halgato_neve, kapott.temavezeto_neve, kapott.beadas_eve);
  96. srand(time(0));
  97. int atment = (rand() % 100)+1;
  98. if (atment<= 60) {
  99. kill(getppid(), SIG_ACCEPTED);// signal kuldes
  100. } else {
  101. kill(getppid(), SIG_NOT_ACCEPTED);// signal kuldes
  102. }
  103.  
  104. } else {
  105. //szulo
  106. signal(SIGUSR1, neptun_signal_handler);
  107. signal(SIGUSR2, neptun_signal_handler);
  108. struct data adat;
  109. read(cso[0], &adat, sizeof(struct data));
  110. write(cso_to_temavez[1],&adat, sizeof(struct data));
  111. //printf("neptun: kapott %s %s %d \n", adat.halgato_neve, adat.temavezeto_neve, adat.beadas_eve);
  112. int returnStatus;
  113. waitpid(pidofhalgato, &returnStatus, 0);
  114. waitpid(pidofTemavezeto, &returnStatus, 0);
  115. printf("neptun:all child ended\n");
  116. }
  117.  
  118.  
  119. }
  120.  
  121. return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement