Sisteme de operare‎ > ‎Laboratoare‎ > ‎

Procese 3: Comunicare prin pipes

Să se scrie un program C ce conţine două procese (părinte + fiu). Procesul părinte deschide
un fişier text ce conţine cifre, litere mari, litere mici şi îl trimite printr-un pipe procesului
fiu. Procesul fiu realizează o statistică cu numărul de caractere primite din fiecare
categorie (cifre, litere mari, litere mici) şi la final va afişa statistica respectivă.

Model

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

int main(void){
    int     pfd[2], nr_bytes;
    pid_t   pid_fiu;
    char    mesaj[20] = "Hello world!";
    char    readbuffer[80];
    
    pipe(pfd);
    
    if((pid_fiu = fork()) == -1)
    {
        perror("fork");
        exit(1);
    }
    
    if(pid_fiu == 0)
    {
        //procesul fiu închide descriptorul de scriere
        close(pfd[1]);
        
        //citeste mesajul din pipe
        nr_bytes = read(pfd[0], readbuffer,
        sizeof(readbuffer));
        
        //si îl afiseaza
        printf("Received string: %s", readbuffer);
    }
    else
    {
        //procesul parinte închide descriptorul de
        //citire
        close(pfd[0]);
        
        //trimite mesajul prin descriptorul de scriere
        write(pfd[1], mesaj, (strlen(mesaj)+1));
        exit(0);
    }
    return(0);
}