/* Exo 2.5 */ /* compilation: gcc -std=c99 consprodN.c -o consprodN */ /* execution: ./consprodN 4 */ #define _POSIX_SOURCE #include #include #include #include #include void producteur(FILE* output) { for(int i = 0 ; i < 4 ; i++) fprintf(output, "coucou\n"); } void consommateur(FILE* input) { char c; while(fread(&c, 1, 1, input) > 0) printf("%c",c); } int main(int argc, char* argv[]) { int N = atoi(argv[1]); int fd[2]; FILE* fp[2]; pipe(fd); fp[0] = fdopen(fd[0], "r"); fp[1] = fdopen(fd[1], "w"); for(int i = 0 ; i < N ; i++) { if(fork() == 0) { /* ième FILS */ fclose(fp[0]); producteur(fp[1]); fclose(fp[1]); return EXIT_SUCCESS; } } /* PAPA */ fclose(fp[1]); consommateur(fp[0]); fclose(fp[0]); for(int i = 0 ; i < N ; i++) wait(NULL); /* elimination zombies */ return EXIT_SUCCESS; }