Opracować zestaw programów typu producent – konsument realizujących przy wykorzystaniu mechanizmu kolejek komunikatów 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 i łączy nazwanych (kolejek FIFO). Scenariusz powiadamiania się procesów o swoim stanie wygląda następująco: do procesu 3 wysyłane są sygnały . Proces 3 przesyła otrzymany sygnał do procesu macierzystego. Proces macierzysty zapisuje wartość sygnału do kolejek FIFO oraz wysyła powiadomienie do procesu 1 o odczytaniu zawartości kolejki FIFO. Proces 1 po odczytaniu sygnału wysyła powiadomienie do procesu 2 o odczytanie kolejki FIFO. Proces 2 powiadamia proces 3 o konieczności odczytu kolejki FIFO. Wszystkie procesy powinny być powoływane automatycznie z jednego procesu inicjującego.

Dodatkowo trzeba zapewnić, aby wszystkie procesy oprócz Procesu 3 miały ignorowały wysyłane z zewnątrz sygnały SIGTERM, SIGTSTP, SIGCONT. Sygnał stopu (pauzy) powinien zatrzymywać czytanie wierszy, a po wznowieniu sygnałem kontynuacji czytanie powinno zostać dokończone. Natomiast sygnał SIGTERM nie powinien przerwać czytania wierszy – cały proces powinien zostać dokończony i po zakończeniu czytania i wypisywania program powinien się zakończyć.

Dla łatwiejszego zrozumienia zasady działania powyższego programu stworzyłem diagram pokazujący jak będą komunikować się procesy.

diagram komunikacji międzyprocesowej

Program do pobrania: