Zadanie polega na napisaniu dwóch oddzielnych programów w języku C - kolejka1k.c oraz kolejka2k.c, spełniających warunki:
-
Oba programy używają identycznych(!) funkcji - klient i serwer. Opcjonalnie (lub żeby się nie powtarzać) obie funkcje mogą być zadeklarowane w oddzielnej bibliotece, dodanej w nagłówkach obu programów.
-
Wymagane jest użycie funkcji fork. Funkcja klienta (zwana dalej klientem) uruchamiana jest w procesie macierzystym, zaś funkcja serwera (zwana dalej serwerem) w procesie potomnym.
-
Do komunikacji między klientem i serwerem program kolejka1k.c używa dwóch łączy jednokierunkowych, zaś program kolejka2k.c używa jednego łącza dwukierunkowego.
-
Klient czyta pierwszy element listy słów argv będący (w domyśle) pełną ścieżką dostępu do pliku. W razie niepowodzenia proces macierzysty zamyka odpowiednie łącze. W przeciwnym razie klient wysyła do serwera przeczytane słowo odpowiednim łączem. Dodatkowo, w przypadku gdy komunikacja opiera się na dwóch łączach jednokierunkowych, proces macierzysty zamyka odpowiednie łącze.
-
Serwer po otrzymaniu danych od klienta próbuje otworzyć do czytania plik o podanej ścieżce dostępu. W razie niepowodzenia proces potomny zamyka odpowiednie łącze, w przeciwnym razie serwer odpowiednim łączem wysyła zawartość pliku do klienta, a następnie proces potomny zamyka odpowiednie łącze.
-
Proces macierzysty czeka na zamknięcie odpowiedniego łącza, w międzyczasie klient wysyła wszystkie otrzymane dane na standardowe wyjście.
Dopiero zaczynam swoją naukę, jeśli chodzi o Sieci komputerowe i mam do napisania właśnie taki program/programy w języku C. Nie wiem jednak jak się za to zabrać. Dlatego z góry dziękuję za wszelkie wskazówki lub jakąkolwiek pomoc. Może ktoś mógłby podać jakiś ogólny schemat lub fragment kodu, który naprowadziłby mnie na napisanie tych programów, albo na początek jednego z nich - załóżmy tego w wersji z dwoma łączami jednokierunkowymi?