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.