• Nie Znaleziono Wyników

Obsługa potoków

N/A
N/A
Protected

Academic year: 2021

Share "Obsługa potoków"

Copied!
1
0
0

Pełen tekst

(1)

Laboratorium Systemów Operacyjnych

Ćwiczenie 6. Obsługa potoków

Łącza w systemie LINUX są plikami specjalnymi, służącymi do komunikacji pomiędzy procesami. Łącza mają kilka cech typowych dla plików zwykłych, czyli posiadają swój i-węzeł, posiadają bloki z danymi. Łącza od plików zwykłych odróżniają następujące cechy:

 ograniczona liczba bloków — mają rozmiar 4KB - 8KB w zależności od systemu,

 dostęp sekwencyjny — na łączach można wykonywać tylko operacje zapisu i odczytu, nie można wykonywać funkcji lseek,

 dane odczytywane z łącza są zarazem usuwane (nie można ich odczytać ponownie),  proces jest blokowany w funkcji read na pustym łączu i w funkcji write, jeśli w łączu nie

ma wystarczającej ilości wolnego miejsca, żeby zmieścić zapisywany blok (wyjątkiem od tej zasady jest przypadek gdy jest ustawiona flaga O_NDELAY).

W systemie LINUX wyróżnia się dwa rodzaje łączy: łącza nazwane i łącza nienazwane. Zwyczajowo przyjęło się określać łącza nazwane terminem kolejki FIFO, a łącza nienazwane terminem potoki. Różnica pomiędzy łączem nazwanym i nienazwanym polega na tym, że pierwsze z nich ma dowiązanie w systemie plików, a drugie nie ma dowiązania i istnieje tak długo, jak długo jest otwarte. Po zamknięciu wszystkich deskryptorów łącze nienazwane przestaje istnieć i zwalniany jest jego i-węzeł oraz wszystkie bloki. Łącze nazwane natomiast po zamknięciu wszystkich deskryptorów w dalszym ciągu ma przydzielony i-węzeł, zwalniane są tylko bloki dyskowe. Jeżeli dwa procesy mają odpowiednie deskryptory łącza, to dla komunikacji między nimi nie ma znaczenia, czy są to deskryptory łącza nazwanego czy nienazwanego. Różnica jest natomiast w sposobie uzyskania deskryptorów łącza.

Funkcje systemowe - Łącza nienazywane int pipe ( int pdesk[2] ); Funkcje systemowe - Łącza nazywane

int mkfifo ( char * path, mode_t mode ); int open ( char *path, int flags );

Funkcje systemowe - Operacje na łączach nazywanych i nienazywanych int read ( inf fd, void *buf, size_t count ); int write ( inf fd, void *buf, size_t count ); Zadania do samodzielnego wykonania.

1. Napisz program który tworzy trzy procesy - proces macierzysty i jego dwa procesy potomne. Pierwszy z procesów potomnych powinien zapisać do potoku napis „HALLO!", a drugi proces potomny powinien ten napis odczytać.

2. Napisz program który tworzy trzy procesy, z których dwa zapisują do potoku, a trzeci odczytuje z niego i drukuje otrzymane komunikaty.

3. Napisz program tworzący dwa procesy: klienta i serwera. Serwer tworzy ogólnodostępną kolejkę FIFO i czeka na zgłoszenia klientów. Każdy klient tworzy własną kolejkę, poprzez którą będą przychodzić odpowiedzi serwera. Zadaniem klienta jest przesłanie nazwy stworzonej przez siebie kolejki, a serwera odesłaniem poprzez kolejkę stworzoną przez klienta wyniku polecenia ls.

Cytaty

Powiązane dokumenty

Jeśli choć kawałek funkcji jest

Wskazówka: Rozbić całkę na 2n części punktami postaci πk

Jeżeli jeden z pierwiastków jest zerem lub równanie nie ma rozwiązań w komórce D11 ma się pojawić napis ‘nie można sprawdzić zgodności znaków’..  Zastanów się

Jeżeli przekażemy do funkcji jako jej argument wskaźnik, wtedy operacje na wskaźniku zmieniają zmienną oryginalną z poza ciała funkcji – nie operujemy na

W rezultacie, jeśli przed T nie było ani jednego „zdarzenia”, to sztucznie przyjmujemy że momentem ostatniego zdarzenia było

Przykładem tego, że w polu badawczym pedagogów, bacznie śledzących dynamikę wpływu socjalizacyjnego dotąd aktywnych i nowo dostrzeżonych podmiotów i przestrzeni,

Ustawodawca przyjmuje jednak fikcję prawną (działającą ex tunc), że po upływie okresu próby w razie nieodwołania warunkowego zwolnienia, czego jednak nie

Zaletami takiej decyzji jest większe usprawnienie tych operacji niż w przypadku umieszczania takowych funkcji w jądrze – czyli wzrost wydajności (poprzez działanie na