Powrót na stronę UNIX

Zadanie składa się z tylko jednego typu programów, które są zarazem serwerem jak i klientem. Pierwszy z uruchomionych procesów ma za zadanie wypisywać na stdout to co dostaje na stdin oraz utworzyć socket typu lokalnego (nazwa pliku socket'u to 1 parametr) na którym będzie przyjmował połączenia.

Kolejne procesy można wywoływać z drugim parametrem wskazującym socket serwera z którym mają się połączyć (parametr 2). Taki proces nie wypisuje danych z wejścia na wyjście, ale przesyła je przez socket do serwera z którym jest połączony.

Zatem nasz program można uruchomić na 2 sposoby, z jednym parametrem jako serwer lub z dwoma jako jednoczesnie sewer i klient.

Serwer do którego socketu podłączone są inne procesy ma pobierać dane do wypisania lub przesłania dalej (zależy czy sam jest podłączony do czyjegoś socketu) nie tylko z stdin ale także ze wszystkich podłączonych socket'ów. Można zatem połączyć kilka procesów poprzez socket w strukture drzewa, w którym dane z lisci i węzłów są przesyłane do korzenia. Dopiero wezeł root drukuje dane na ekran.

Każdy z procesów można wyłączyć Ctrl-C. Jeśli zakończony zostanie w ten sposób proces który pełni rolę serwera, te procesy, które korzystały z niego mają przejść na wypisywanie na stdout od następnego komunikatu (ewentualna strata danych z bieżącego pakietu jest dopuszczalna). Podanie Ctrl-D do procesu kończy podawanie danych z stdin, nie oznacza to jednak końca programu.

Dane przesyłane między procesami mają postać 20 znakowych tekstów poprzedzonych tekstem [PID] gdzie PID to pid procesu który pobrał dane z stdin. Można do komunikacji przez socket używać pakietów o ustalonym wymiarze.

Wszystkie programy mają być jedno-procesowe, należy użyć funkcji select, zakładamy, że każdy proces może przyjąć maksymalnie 5 połączeń naraz. 6 połączenie można ignorować aż zwolni się jedno z miejsc w tablicy deskryptorów.

UWAGI:

  1. Program wywołany bez parametrów wypisuje USAGE.
  2. Zadanie będzie sprawdzane przez Marcina Borkowskiego, należy je wgrać do katalogu /home2/samba/borkowskim/unix/ .


Szczególna uwagę zwracamy na:
Powrót na stronę UNIX