Tworzenie potoków w C

0

Cześć wszystkim,

Właśnie próbuję zrozumieć mechanizm działania potoków realizowanych w C. Właściwie moim zadaniem jest napisanie programu, który prześle przez rodzica (proces nadrzędny) zawartość wybranego pliku (obrazka) do procesu potomnego. Następnie proces potomny powinien uruchomić i wyświetlić ten obrazek za pomocą przeglądarki obrazków (np. "Eye of Gnome", czyli eog). Wiem, że powinienem przy tym skorzystać m.in. z funkcji close(), dup(), write(), read(). Korzystam z następującego samouczka: http://www.linuxpl.org/LPG/node10.html i na razie próbuję zrozumieć, co się dzieje w poszczególnych etapach programu tam zamieszczonego. Jest tam między innymi taki programik:

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

int main(void)
{
    int     fd[2], nbytes;
    pid_t   childpid;
    char    string[] = "Pozdrowienia przesyła Zdzisiek z rodziną!\n";
    char    readbuffer[80];

    pipe(fd);

    if((childpid = fork()) == -1)
    {
        perror("fork");
        exit(1);
    }

    if(childpid == 0)
    {
        /* Potomek zamyka końcówkę wejściową */
        close(fd[0]);

        /* Przesyłamy "string" poprzez końcówke wyjściową potoku */
        write(fd[1], string, strlen(string));
        exit(0);
    }
    else
    {
        /* Rodzic zamyka końcówkę wyjściową */
        close(fd[1]);

        /* oraz wczytuje dane z potoku */
        nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
        printf("Otrzymany łańcuch: %s", readbuffer);
    }

    return(0);
}

Z całego programu nie rozumiem, dlaczego została zastosowana pętla if/else i dlaczego jest zastosowane "exit(0)", a pomimo to program nie wyłącza się, a przechodzi sobie do "else" i wyświetla tekst. Czy ma to związek z forkiem, który tworzy nowy podproces? Nie za bardzo rozumiem też jaką funkcję pełni zmienna "int nbytes".

Bardzo dziękuję za wszelkie wskazówki.

1

Poczytaj co robi fork.

0

Dzięki za odpowiedź, poczytam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1