#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>

main(int argc, char* argv[])
{
    // char str[10], *res;
    int x;
    int i;
    int fds1[2];
    int test;
    int antal = atoi(argv[1]);
    int sum = 0;
    pipe(fds1);

    if(!fork())                 //Detta är B, B ska läsa från läsänden på pipen
    {
        for(i=0; i<antal; i++)
        {
            read(fds1[0],&x,sizeof(int));
            sum = sum + x;
        }

        printf("Sum of pids: %d.\n", sum);

        test = close(fds1[1]); assert(test==0);
        test = close(fds1[0]); assert(test==0);
        exit(0);
    }
    system("ps -o pid,ppid,comm");

    for(i=0; i<antal; i++)
    {
        if(!fork())         //g ska skriva på sin stdout som är kopplad till fds[1] på pipen.
        {
            test = close(1); assert(test==0);
            test = dup(fds1[1]); assert(test==1);
            test = close(fds1[1]); assert(test==0);
            test = close(fds1[0]); assert(test==0);
            sleep(1);
            execlp("./g","./g",NULL);
            fprintf(stderr,"execlp did not work\n");
            exit(1);
        }
        system("ps -o pid,ppid,comm");
        wait(0);
    }
    wait(0);

    test = close(fds1[1]); assert(test==0);
    test = close(fds1[0]); assert(test==0);

    wait(0);                    //Väntar på B.
    system("ps -o pid,ppid,comm");
}
