/* Exo 2.2 et 2.3 */ /* compilation: gcc -std=c99 consprod.c -o consprod */ /* execution: ./consprod */ #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 fd[2]; FILE* fp[2]; pipe(fd); fp[0] = fdopen(fd[0], "r"); fp[1] = fdopen(fd[1], "w"); /* Exo 2.3: En principe, il est mieux que le processus qui interagit avec le terminal rende la main en dernier et soit donc le père. */ /* FILS */ if(fork() == 0) { fclose(fp[0]); producteur(fp[1]); fclose(fp[1]); return EXIT_SUCCESS; } /* PAPA */ fclose(fp[1]); consommateur(fp[0]); fclose(fp[0]); wait(NULL); return EXIT_SUCCESS; }