Napisz program, który najpierw:

  1. utworzy potok (funkcją pipe),
  2. uruchomi podproces, z którym proces nadrzędny będzie komunikował się przez ten potok (funkcja fork),
  3. proces nadrzędny odpyta użytkownika o nazwę pliku z obrazkiem (JPEG lub PNG), a następnie wyśle procesowi potomnemu zawartość tego pliku przez potok,
  4. proces potomny wykona przekierowanie strumienia stdin na potok (funkcje close i dup), a następnie uruchomi program (jedna z funkcji exec*) wyświetlający obrazek pobrany z wejścia (deskryptora 0).

    Jako program wyświetlający obrazki można zastosować program display należący do pakietu Image Magick. Przydatnym programem wyświetlającym obrazki jest również xv, lecz jego licencja zezwala na jego użycie tylko do celów prywatnych.

Uruchom program, sprawdź, czy proces potomny zacznie wyświelać obrazek od razu, czy dopiero po zamknięciu potoku przez proces nadrzędny.

Następnie zmodyfikuj program w taki sposób, by był on w stanie wyświetlać wiele obrazków, których nazwy proces macierzysty będzie pobierał od użytkownika w pętli, i których treść będzie następnie wysyłał procesowi potomnemu.

Ponieważ proces nadrzędny zwykle musi zamknąć piszący koniec potoku zanim proces wyświetlający wyświetli obrazek, w zmodyfikowanej wersji programu należy użyć potoków nazwanych (FIFO). Pamiętaj: otwarcie potoku nazwanego jest możliwe tylko wtedy, gdy dwa procesy próbują jednocześnie otworzyć koniec czytający i piszący potoku.