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 s_keres {
- char nev[30];
- char varos[30];
- char cim[30];
- char ajandek[30];
- int datum;
- int szallitva;
- };
- struct uzenet {
- long mtype;//ez egy szabadon hasznalhato ertek, pl uzenetek osztalyozasara
- char mtext [ 1024 ];
- };
- void menuMegjelenitese(){
- printf("1 - Uj keres hozzaadasa\n");
- printf("2 - Keresek listazasa\n");
- printf("3 - Keresek listazasa varos szerint\n");
- printf("4 - Keresek listazasa ajandek szerint\n");
- printf("5 - Ajandekok szallitasa megadott varosba.\n");
- printf("6 - Ajandektipus szallitasa mindenhova.\n");
- printf("CTRL + C - Kilepes\n");
- }
- void keresTorlese(char nev[30]) {
- if( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *file=fopen("db","r");
- FILE *tempfile=fopen("temp_db","w");
- struct s_keres keres;
- char line[500];
- while(fgets(line, 500, file) != NULL) {
- sscanf(line, "%s %s %s %s %i\n", keres.nev, keres.varos,
- keres.cim, keres.ajandek, &keres.datum);
- if (strcmp(keres.nev, nev)) {
- fprintf(tempfile, "%s %s %s %s %i\n", keres.nev, keres.varos, keres.cim, keres.ajandek, keres.datum);
- }
- }
- fclose(file);
- fflush(tempfile);
- fclose(tempfile);
- rename("temp_db", "db");
- }
- }
- void ujKeres() {
- FILE *file=fopen("db","a+");
- struct s_keres keres;
- char ch;
- printf("Uj rekord hozzaadasa\n");
- printf("Mi a gyerek neve?\n");
- scanf("%s", keres.nev);
- if ((kertMar(keres.nev))==1) {
- printf("O mar kert, toroljuk az elozo kerest? Ha igen nyomjon 'T' gombot.\n");
- scanf("\n%c", &ch);
- if ((ch == 't') || (ch== 'T')) {
- fclose(file);
- keresTorlese(keres.nev);
- FILE *file=fopen("db","a+");
- } else {
- return;
- }
- }
- printf("Varos neve?\n");
- scanf("%s", keres.varos);
- printf("Cim?\n");
- scanf("%s", keres.cim);
- printf("Mi legyen az ajandek? baba, auto, labda, kirako, szinezo es konyv valaszthato\n");
- scanf("%s", keres.ajandek);
- while (!((strcmp(keres.ajandek,"baba")==0 || strcmp(keres.ajandek,"auto")==0 || strcmp(keres.ajandek,"labda")==0
- ||strcmp(keres.ajandek,"kirako")==0 || strcmp(keres.ajandek,"szinezo")==0 || strcmp(keres.ajandek,"konyv")==0)))
- {
- printf("\nhibas ertek, adjon meg ujat!\n");
- scanf("%s", keres.ajandek);
- }
- int mytime = time(NULL);
- keres.datum=mytime;
- keres.szallitva = 0;
- fprintf (file, "%s %s %s %s %i %i\n",
- keres.nev, keres.varos, keres.cim, keres.ajandek, keres.datum, keres.szallitva);
- fclose(file);
- }
- int kertMar(char nev[30]){ //0 ha meg nem kert, es 1 ha mar kert
- if( access("db", F_OK ) == -1 ) {
- return 0;
- } else {
- FILE *file=fopen("db","r");
- struct s_keres keres;
- char line[500];
- while(fgets(line, sizeof(line), file)) {
- sscanf (line, "%s %s %s %s %i\n", keres.nev, keres.varos,
- keres.cim, keres.ajandek, &keres.datum);
- if (strcmp(keres.nev, nev) == 0) {
- return 1;
- }
- }
- fclose(file);
- return 0;
- }
- }
- int varosraSzur(char p_varos[30]){
- int keresekSzama = 0;
- int osszKeresekSzama = 0;
- if ( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *f=fopen("db","r");
- struct s_keres keres;
- char line[500];
- char varos[30];
- if (0 == strcmp(p_varos, "beolvas")) {
- printf("Mi a varos neve?\n");
- scanf("%s", varos);
- } else {
- strcpy(varos, p_varos);
- }
- while (fgets(line, sizeof(line), f)) {
- sscanf (line, "%s %s %s %s %i\n", keres.nev,
- keres.varos, keres.cim, keres.ajandek, &keres.datum);
- char buff[100];
- time_t recdate = keres.datum;
- strftime (buff, 100, "%Y-%m-%d %H:%M:%S", localtime(&recdate));
- if ( !strcmp(keres.varos, varos)) {
- keresekSzama = keresekSzama + 1;
- printf ("%s %s %s %s %s\n", keres.nev, keres.varos, keres.cim, keres.ajandek, buff);
- }
- osszKeresekSzama = osszKeresekSzama + 1;
- }
- fclose(f);
- if (keresekSzama == 0) {
- printf("Nem volt ilyen varos %i keresbol\n.", osszKeresekSzama);
- return 0;
- } else {
- printf("Keresek szama ebbol a varosbol %i osszesen: %i\n", keresekSzama, osszKeresekSzama);
- return 1;
- }
- /*
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- */
- }
- }
- int ajandekraSzur(char p_ajandek[30]){
- int keresekSzama = 0;
- int osszKeresekSzama = 0;
- if ( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *f=fopen("db","r");
- struct s_keres keres;
- char line[500];
- char ajandek[30];
- if (0 == strcmp(p_ajandek, "beolvas")) {
- printf("Melyik ajandekra szurjunk?\n");
- scanf("%s", ajandek);
- } else {
- strcpy(ajandek, p_ajandek);
- }
- while (fgets(line, sizeof(line), f)) {
- sscanf (line, "%s %s %s %s %i\n", keres.nev,
- keres.varos, keres.cim, keres.ajandek, &keres.datum);
- char buff[100];
- time_t recdate = keres.datum;
- strftime (buff, 100, "%Y-%m-%d %H:%M:%S", localtime(&recdate));
- if ( !strcmp(keres.ajandek, ajandek)) {
- keresekSzama = keresekSzama + 1;
- printf ("%s %s %s %s %s\n", keres.nev, keres.varos, keres.cim, keres.ajandek, buff);
- }
- osszKeresekSzama = osszKeresekSzama + 1;
- }
- fclose(f);
- if (keresekSzama == 0) {
- printf("Nem kert meg senki ilyen ajandekot %i keresbol\n.", osszKeresekSzama);
- return 0;
- } else {
- printf("Keresek szama ilyen ajandekbol %i osszesen: %i\n", keresekSzama, osszKeresekSzama);
- return 1;
- }
- /*
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- */
- }
- }
- void keresekListazasa(){
- int keresekSzama = 0;
- if( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *file=fopen("db","r");
- struct s_keres keres;
- char line[500];
- while(fgets(line, sizeof(line), file)) {
- sscanf (line, "%s %s %s %s %i %i\n", keres.nev, keres.varos,
- keres.cim, keres.ajandek, &keres.datum, &keres.szallitva);
- if (0 == keres.szallitva)
- {
- char buff[100];
- time_t recdate = keres.datum;
- strftime (buff, 100, "%Y-%m-%d %H:%M:%S", localtime(&recdate));
- printf ("%s %s %s %s %s %i\n", keres.nev, keres.varos,
- keres.cim, keres.ajandek, buff, keres.szallitva);
- keresekSzama = keresekSzama + 1;
- }
- }
- printf("Keresek szama osszesen: %i\n", keresekSzama);
- fclose(file);
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- }
- }
- void bejegyez(char str[30]) {
- if( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *file=fopen("db","r");
- FILE *tempfile=fopen("temp_db","w");
- struct s_keres keres;
- char line[500];
- while(fgets(line, 500, file) != NULL) {
- sscanf(line, "%s %s %s %s %i %i\n", keres.nev, keres.varos,
- keres.cim, keres.ajandek, &keres.datum, &keres.szallitva);
- if (!((strcmp(str,"baba")==0 || strcmp(str,"auto")==0 || strcmp(str,"labda")==0
- ||strcmp(str,"kirako")==0 || strcmp(str,"szinezo")==0 || strcmp(str,"konyv")==0)))
- {
- if (0 == strcmp(keres.varos, str)) {
- keres.szallitva = 1;
- }
- } else
- {
- if (0 == strcmp(keres.ajandek, str)) {
- keres.szallitva = 1;
- }
- }
- fprintf(tempfile, "%s %s %s %s %i %i\n", keres.nev, keres.varos, keres.cim, keres.ajandek, keres.datum, keres.szallitva);
- }
- fclose(file);
- fflush(tempfile);
- fclose(tempfile);
- rename("temp_db", "db");
- }
- }
- void varosbaSzallit() {
- int pid = 0;
- char varos[30];
- int pfd[2];
- pipe(pfd);
- int uzenetsor, status;
- key_t kulcs = 1298; //ftok("elsoKulcs",1);
- 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());
- 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());
- }
- }
- varosokListazasa() {
- int keresekSzama = 0;
- int osszKeresekSzama = 0;
- if ( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *f=fopen("db","r");
- struct s_keres keres;
- char line[500];
- //char varos[30];
- char varosok[10][30];
- int varosSzam = 1;
- while (fgets(line, sizeof(line), f)) {
- sscanf (line, "%s %s %s %s %i %i\n", keres.nev,
- keres.varos, keres.cim, keres.ajandek, &keres.datum, &keres.szallitva);
- char buff[100];
- time_t recdate = keres.datum;
- strftime (buff, 100, "%Y-%m-%d %H:%M:%S", localtime(&recdate));
- if (keres.szallitva == 0) {
- keresekSzama = keresekSzama + 1;
- //printf ("%s\n", keres.varos);
- int j = 1;
- int voltIlyen = 0;
- while (j < varosSzam) {
- //printf("keres.varos %s es varosok[%i] %s\n", keres.varos, varosSzam-1, &varosok[varosSzam-1]);
- if( 0 == strcmp(keres.varos, varosok[j]))
- {
- voltIlyen = 1;
- break;
- } else {
- j = j+1;
- }
- }
- if (voltIlyen == 0) {
- strcpy(varosok[varosSzam], keres.varos);
- //printf("uj hozzadva, varos neve: %s sorszama: %i \n", varosok[varosSzam], varosSzam);
- printf("%s\n",varosok[varosSzam]);
- varosSzam = varosSzam +1;
- }
- osszKeresekSzama = osszKeresekSzama + 1;
- //if (osszKeresekSzama == 0)
- }
- }
- fclose(f);
- }
- }
- ajandekokListazasa() {
- int keresekSzama = 0;
- int osszKeresekSzama = 0;
- if ( access("db", F_OK ) == -1 ) {
- printf("nem letezik a fajl, eloszor adjon hozza kerest!\n");
- printf("\nfolytatashoz nyomjon entert\n");
- int c;
- c = getchar();
- getchar();
- return;
- } else {
- FILE *f=fopen("db","r");
- struct s_keres keres;
- char line[500];
- //char varos[30];
- char ajandekok[10][30];
- int ajandekSzam = 1;
- while (fgets(line, sizeof(line), f)) {
- sscanf (line, "%s %s %s %s %i %i\n", keres.nev,
- keres.varos, keres.cim, keres.ajandek, &keres.datum, &keres.szallitva);
- char buff[100];
- time_t recdate = keres.datum;
- strftime (buff, 100, "%Y-%m-%d %H:%M:%S", localtime(&recdate));
- keresekSzama = keresekSzama + 1;
- //printf ("%s\n", keres.varos);
- int j = 1;
- int voltIlyen = 0;
- while (j < ajandekSzam) {
- //printf("keres.varos %s es varosok[%i] %s\n", keres.varos, varosSzam-1, &varosok[varosSzam-1]);
- if( 0 == strcmp(keres.ajandek, ajandekok[j]))
- {
- voltIlyen = 1;
- break;
- } else {
- j = j+1;
- }
- }
- if (voltIlyen == 0) {
- strcpy(ajandekok[ajandekSzam], keres.ajandek);
- //printf("uj hozzadva, varos neve: %s sorszama: %i \n", varosok[varosSzam], varosSzam);
- printf("%s\n",ajandekok[ajandekSzam]);
- ajandekSzam = ajandekSzam +1;
- }
- osszKeresekSzama = osszKeresekSzama + 1;
- }
- fclose(f);
- }
- }
- void ajandekotSzallit() {
- int pid = 0;
- char ajandek[30];
- int pfd[2];
- pipe(pfd);
- int uzenetsor, status;
- key_t kulcs = 1297; //ftok("kulcs",1);
- ajandekokListazasa();
- 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], ajandek, 1) == 1) //read from 0, write to 1
- {
- if (ioctl(pfd[0], FIONREAD, &count) != -1)
- {
- // fprintf(stdout,"Child: count = %d\n",count);
- if (read(pfd[0], ajandek + 1, count) == count)
- fprintf(stdout,"Child: received \"%s\"\n", ajandek); // + 1);
- close(pfd[0]);
- //printf("Megy vissza a message: %i \n", name[0]);
- }
- else
- { // could not read in-size
- perror("Failed to read input size.");
- }
- }
- if (1 == ajandekraSzur(ajandek)) // ajandekra szur fugvennyel gond lesz
- {
- printf("gyerek mondja szallitva\n");
- kuld( uzenetsor, "szallitva" );
- } else {
- printf("gyerek mondja hiba\n");
- kuld( uzenetsor, "hiba" );
- }
- // status = ;
- //wait();
- if ( msgctl( uzenetsor, IPC_RMID, NULL ) < 0 )
- perror("msgctl");
- }
- else //szulo
- {
- close(pfd[0]);
- printf("Melyik ajandekot szallitsuk?\n");
- scanf("%s", ajandek);
- write(pfd[1], ajandek, strlen(ajandek)+2);
- if (0 != fogad(uzenetsor))
- {
- //printf("beirhatjuk hogy egy a szallitva ezeknel..\n");
- bejegyez(ajandek);
- printf("bejegyezve");
- } else
- {
- printf("nincs ilyen ajandek vagy ilyet mar szallitottunk\n");
- }
- }
- }
- // sending a message
- int kuld( int uzenetsor, char varos[30]) {
- //A manó a szállítás elvégzéséről üzenetsorban tájékoztatja télaput,aki bejegyzi, hogy melyik városba vagy melyik lett az ajándék kiszállítva
- //printf("probaMitIr %s\n", varos);
- struct uzenet uz;// = { 5, varos };
- uz.mtype = 5;
- strcpy(uz.mtext, varos);
- int status;
- status = msgsnd( uzenetsor, &uz, strlen ( uz.mtext ) + 1 , 0 );
- // a 3. param ilyen is lehet: sizeof(uz.mtext)
- // a 4. parameter gyakran IPC_NOWAIT, ez a 0-val azonos
- if ( status < 0 )
- perror("msgsnd");
- return 0;
- }
- // receiving a message.
- int fogad( int uzenetsor ) {
- //A manó a szállítás elvégzéséről üzenetsorban tájékoztatja télaput,aki bejegyzi, hogy melyik városba vagy melyik lett az ajándék kiszállítva
- struct uzenet uz;
- int status;
- // az utolso parameter(0) az uzenet azonositoszama
- // ha az 0, akkor a sor elso uzenetet vesszuk ki
- // ha >0 (5), akkor az 5-os uzenetekbol a kovetkezot
- // vesszuk ki a sorbol
- status = msgrcv(uzenetsor, &uz, 1024, 5, 0 );
- if ( status < 0 )
- perror("msgsnd");
- else
- {
- // printf( "A kapott uzenet kodja: %ld, szovege: %s\n", uz.mtype, uz.mtext );
- printf("A kapott uzenet: %s\n", uz.mtext);
- //
- }
- if (0 == strcmp(uz.mtext,"szallitva"))
- {
- return 1;
- } else return 0;
- }
- int main() {
- int menuId;
- while(1) {
- menuMegjelenitese();
- scanf("%d", &menuId);
- switch (menuId) {
- case 1:
- ujKeres();
- break;
- case 2:
- keresekListazasa();
- break;
- case 3:
- varosraSzur("beolvas");
- break;
- case 4:
- ajandekraSzur("beolvas");
- break;
- case 5:
- varosbaSzallit();
- break;
- case 6:
- ajandekotSzallit();
- break;
- default:
- printf("Nincs ilyen menu!\n");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement