#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>

struct dati {
        int parentesiAperte;
        int parentesiChiuse;
        int puntiVirgola;
};

int main() {
        int pd[2];
        pipe(pd);

        pid_t pid = fork();
        if (pid < 0) {
                printf("Errore nella creazione del figlio, esplodi.");
                return 1;
        }

        // Processo figlio.
        if (pid == 0) {
                close(pd[0]);
                FILE *f;
                int pA = 0, pC = 0, pV = 0;

                if ((f = fopen("../File/ver.c", "r")) == NULL) {
                        printf("Errore apertura file testo.txt");
                        return 1;
                }

                while (!feof(f)) {
                        char c = fgetc(f);
                        switch(c) {
                                case '{':
                                        pA++;
                                        break;
                                case '}':
                                        pC++;
                                        break;
                                case ';':
                                        pV++;
                                        break;
                        }
                }
                struct dati datiDaScrivere = { pA, pC, pV };
                write(pd[1], &datiDaScrivere, sizeof(datiDaScrivere));
                fclose(f);
                exit(0);
        }

        // Processo padre.
        if (pid > 0) {
                close(pd[1]);
                int status;
                wait(&status);
                if (WIFSIGNALED(status)) {
                        printf("Errore nel figlio. muori.");
                        return 1;
                }

                struct dati datiLetti;
                read(pd[0], &datiLetti, sizeof(datiLetti));

                printf("Parentesi Aperte: %d\n", datiLetti.parentesiAperte);
                printf("Parentesi Chiuse: %d\n", datiLetti.parentesiChiuse);
                printf("Punti e virgole: %d\n", datiLetti.puntiVirgola);
        }
        return 0;
}
