logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program w c pod Linuxem wykorzystujacy mechanizm pipes

marcinl 23 Cze 2005 19:15 1050 0
REKLAMA
  • #1 1601735
    marcinl
    Poziom 2  
    Posty: 3
    Czy jest ktos w stanie pomoc mi w tym programie

    Opracować zestaw programów typu producent - konsument realizujących przy
    wykorzystaniu mechanizmu łączy komunikacyjnych (pipes), następujący schemat
    komunikacji międzyprocesowej:

    Proces 1: czyta dane (pojedyncze wiersze) ze standardowego strumienia
    wejściowego i przekazuje je w niezmienionej formie do procesu 2.

    Proces 2: pobiera dane przesłane przez proces 1. Oblicza ilość znaków w
    każdej linii i wyznaczoną liczbę przekazuje do procesu 3.

    Proces 3: pobiera dane wyprodukowane przez proces 2 i umieszcza je w
    standardowym strumieniu wyjściowym. Każda odebrana jednostka danych powinna
    zostać wyprowadzona w osobnym wierszu.

    Należy zaproponować i zaimplementować mechanizm informowania się procesów o
    swoim stanie. Należy wykorzystać do tego dostępny mechanizm sygnałów,
    semaforów i pamięci dzielonej. Wszystkie trzy procesy powinny być powoływane
    automatycznie z jednego procesu inicjującego.

    Udało mi zrealizowac 2 procesy , ale nie wiem jak powolac ten trzeci ktory
    ma wyswetlic wynik


    #include <stdio.h>
    
    #include <stdio.h>
    
    #include <unistd.h>
    
    #include <sys/types.h>
    
    int main(void)
    
    {
    
    int pipes[2], nbytes,a;
    
    pid_t POTOMEK;
    
    char licz[10];
    
    char readbuffer[80];
    
    pipe(pipes);
    
    if((POTOMEK = fork()) == -1)
    
    {
    
    perror("fork");
    
    return 0;
    
    }
    
    if(POTOMEK == 0)
    
    {
    
    /* zamykam do pisania */
    
    close(pipes[0]);
    
    printf("Wpisz tekst: ");
    
    scanf("%s",licz);
    
    write(pipes[1], licz, sizeof(licz));
    
    printf("Wysylam do P2 tekst : %s\n\n",licz);
    
    return 0;
    
    }
    
    else
    
    {
    
    /* zamykam dla czytania */
    
    close(pipes[1]);
    
    nbytes = read(pipes[0], readbuffer, sizeof(readbuffer));
    
    a=strlen(readbuffer);
    
    printf("Obliczam i wysylam wynik do P3: %d ten wynik pwinien wyswietlic w 
    P3\n", a);
    
    }
    
    }


    Marcin
  • REKLAMA
REKLAMA