Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <string.h>
- #include <sys/wait.h>
- #include <time.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #define SIG_NOT_ACCEPTED SIGUSR2
- #define SIG_ACCEPTED SIGUSR1
- int cso[2];
- int cso_to_temavez[2];
- int waitforsignal = 1;
- int pidofhalgato;
- struct data {
- char halgato_neve[256];
- char temavezeto_neve[256];
- int beadas_eve;
- };
- void neptun_signal_handler(int sig) {
- if (sig == SIG_NOT_ACCEPTED) {
- key_t key = ftok("asd.k",65);
- int shmid = shmget(key,1024,0666|IPC_CREAT);
- char *str = (char*) shmat(shmid,(void*)0,0);
- strcpy( str, "nem Illes");
- //osztott memoria létrehozása és beleirása
- //nincs elfogadva
- }
- kill(pidofhalgato, sig);
- }
- void hallgato_signal_handler(int sig) {
- if (sig == SIG_ACCEPTED) {
- printf("hallgato: elfogadva\n");
- }else if (sig == SIG_NOT_ACCEPTED) {
- printf("hallgato: Nem elfogadva\n");
- key_t key = ftok("asd.k",65);
- int shmid = shmget(key,1024,0666|IPC_CREAT);
- char *str = (char*) shmat(shmid,(void*)0,0);
- srand(time(0));
- int random = (rand() % 100)+1;
- if(random % 2 == 0) {
- printf("hallgato: choosed %s \n",str);
- } else {
- printf("hallgato: choosed teljesen mas tanar\n");
- }
- //nincs elfogadva
- }
- waitforsignal = 0;
- }
- int main() {
- if (pipe(cso)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- //cso letrehozva
- if (pipe(cso_to_temavez)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- pidofhalgato = fork();
- if (pidofhalgato == 0) {
- //gyerek
- struct data adatom;
- adatom.beadas_eve = 2019;
- strcpy( adatom.halgato_neve, "komaromi richard");
- strcpy( adatom.temavezeto_neve, "Illes");
- //printf("hallgato: elkuldott %s %s %d\n", adatom.halgato_neve, adatom.temavezeto_neve, adatom.beadas_eve);
- write(cso[1],&adatom, sizeof(struct data));
- signal(SIG_ACCEPTED, hallgato_signal_handler);
- signal(SIG_NOT_ACCEPTED, hallgato_signal_handler);
- while(waitforsignal==1) {
- }
- printf("hallgato: befejezem\n");
- } else {
- int pidofTemavezeto = fork();
- if (pidofTemavezeto == 0 ) {
- //temavezto
- struct data kapott;
- read(cso_to_temavez[0], &kapott, sizeof(struct data));
- printf("temavezto: kapott %s %s %d \n", kapott.halgato_neve, kapott.temavezeto_neve, kapott.beadas_eve);
- srand(time(0));
- int atment = (rand() % 100)+1;
- if (atment<= 60) {
- kill(getppid(), SIG_ACCEPTED);// signal kuldes
- } else {
- kill(getppid(), SIG_NOT_ACCEPTED);// signal kuldes
- }
- } else {
- //szulo
- signal(SIGUSR1, neptun_signal_handler);
- signal(SIGUSR2, neptun_signal_handler);
- struct data adat;
- read(cso[0], &adat, sizeof(struct data));
- write(cso_to_temavez[1],&adat, sizeof(struct data));
- //printf("neptun: kapott %s %s %d \n", adat.halgato_neve, adat.temavezeto_neve, adat.beadas_eve);
- int returnStatus;
- waitpid(pidofhalgato, &returnStatus, 0);
- waitpid(pidofTemavezeto, &returnStatus, 0);
- printf("neptun:all child ended\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement