Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <errno.h>
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
- #include <sys/ioctl.h>
- #include <sys/ipc.h>
- #include <sys/wait.h>
- #include <sys/msg.h>
- struct uzenet
- {
- int mtype;
- char mtext [1024];
- };
- int main()
- {
- int pid = 0;
- char varos[30];
- int pfd[2];
- pipe(pfd);
- int uzenetsor, status;
- key_t kulcs = 1234;
- //varosokListazasa();
- uzenetsor = msgget( kulcs, 0600 | IPC_CREAT );
- if ( uzenetsor < 0 ) {
- perror("msgget");
- // return 1;
- }
- pid = fork();
- if (pid == 0) //gyerek
- {
- int count = 0;
- close(pfd[1]);
- while (read(pfd[0], varos, 1) == 1) //read from 0, write to 1
- {
- if (ioctl(pfd[0], FIONREAD, &count) != -1)
- {
- if (read(pfd[0], varos + 1, count) == count)
- fprintf(stdout,"Child: received \"%s\"\n", varos); // + 1);
- close(pfd[0]);
- }
- else
- { // could not read in-size
- perror("Failed to read input size.");
- }
- }
- //if (1 == varosraSzur(varos))
- //{
- printf("gyerek mondja szallitva\n");
- kuld( uzenetsor, "szallitva" );
- /* } else {
- printf("gyerek mondja hiba\n");
- kuld( uzenetsor, "hiba" );
- }*/
- //waitpid(getppid());
- //varjuk meg a szulot
- if ( msgctl( uzenetsor, IPC_RMID, NULL ) < 0 ) {
- perror("msgctl");
- } else {
- printf("uzenetsor torolve\n");
- }
- printf("gyerek vegzett\n");
- kill(getpid(), SIGUSR1 );
- }
- else //szulo
- {
- close(pfd[0]);
- printf("Melyik varosba szallitsunk?\n");
- scanf("%s", varos);
- write(pfd[1], varos, strlen(varos)+2);
- if (0 != fogad(uzenetsor))
- {
- //bejegyez(varos);
- printf("bejegyezve");
- } else
- {
- printf("nincs ilyen varos vagy ide mar szallitottunk\n");
- }
- printf("szulo vegzett\n");
- //kill(getpid());
- }
- }
- int kuld( int uzenetsor, char varos[30])
- {
- struct uzenet uz;
- uz.mtype = 5;
- strcpy(uz.mtext, varos);
- int status;
- status = msgsnd( uzenetsor, &uz, strlen ( uz.mtext ) + 1 , 0 );
- if ( status < 0 )
- perror("msgsnd");
- return 0;
- }
- int fogad( int uzenetsor )
- {
- struct uzenet uz;
- int status;
- status = msgrcv(uzenetsor, &uz, 1024, 5, 0 );
- if ( status < 0 )
- perror("msgsnd");
- else
- {
- printf("A kapott uzenet: %s\n", uz.mtext);
- //
- }
- if (0 == strcmp(uz.mtext,"szallitva"))
- {
- return 1;
- } else return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement