Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Podobne dokumenty
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Kolejki FIFO (łącza nazwane)

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

4.2 Sposób korzystania z l acza

Wykład PASCAL - Pliki tekstowe

Łącza nienazwane(potoki)

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Biblioteka standardowa - operacje wejścia/wyjścia

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Pliki. Operacje na plikach w Pascalu

Programowanie w językach

System plików warstwa logiczna

Systemy Operacyjne - Operacje na plikach

Programowanie Współbieżne. W Linuxie/Unixie

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Klient poczty elektronicznej - Thunderbird

Działanie systemu operacyjnego

Ą Ą Ł

Ę Ą Ż ć Ę Ż Ł ź

Ż Ć Ź Ź Ż Ą Ą ć Ź Ź Ć Ę

Ą Ą

ć Ę ć ć ć ć ą

ż

ć Ę Ę ć Ę ć Ę Ę Ę

Ę Ą Ł Ę Ł ć

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

aodczytywać zniegoza pomoc afunkcjiread, (niebuforowane funkcje wejścia/wyjścia). e sukcesem, to zwróci liczb, erzeczywiściezapisanychbajtów.

Podstawy i języki programowania

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Pliki. Informacje ogólne. Obsługa plików w języku C

Temat zajęć: Obsługa łączy komunikacyjnych

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Informatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)

Działanie systemu operacyjnego

Klient-Serwer Komunikacja przy pomocy gniazd

IPC: Kolejki komunikatów

Podstawy programowania w języku C++


ć Ę ć Ę ź Ę

Ę Ż ż Ł ź ż ż ż ż

ź Ć Ż

Funkcje zawarte w bibliotece < io.h >

Zwielokrotnianie wejścia wyjścia

Działanie systemu operacyjnego

Mechanizmy z grupy IPC

Ż ź Ł

ć ć ć

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Ą Ę Ł Ą Ż

ź Ź Ź ć ć ć ź ć ć ć ć ć Ź

Ę ź Ą

Ą ŚĆ Ś Ś Ę ć

ż ą Ę ą ą Ż ą ż ż ą Ż Ż ż ą ą ż ć Ż Ź ż ż ą ą Ł ć Ó ż Ó Ć

Znaki globalne w Linuxie

Ł

Ł Ą Ł Ł ć

Ł

Ą Ą Ł Ą

Ę

ś ś ś ź ć ś ś

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

ż ż ć ć ć ć ć ć ć ż ż ź ć Ą Ą ż ć ć ź

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Ł ó ż ż Ż Ż Ż Ż Ż Ż Ż Ź Ź ż

Statyczne i dynamiczne predykaty

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Ł Ą Ż Ż Ó ż ć

ś ś ś ś ś ś ś ś ś ś ć ś Ż Ż ć ś ś Ż ć

ś ść ść ś ść ść ś ś ś ś ść ś ś ś ść ść

Ż Ł Ó Ę

ń ż Ż

ń Ź Ż ć Ż Ą ż Ą ż

ż Ć ż

Program dla praktyki lekarskiej

ń ń ń ń ń Ń ń ć ź

Funkcje zawarte w bibliotece < io.h >

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

ż Ę Ę ż ż

INSTRUKCJA OBSŁUGI PRZYSTAWKI PEN-01 DO PENDRIVE A

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

Temat zajęć: Obsługa systemu plików.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Działanie systemu operacyjnego

Robert Barański, AGH, KMIW Writing TDM and TDMS Files in LabVIEW v1.0

INSTRUKCJA PROGRAMOWANIA KASY FISKALNEJ I-ERGOS 3050 PRZY POMOCY PROGRAMU PLU MANAGER I-ERGOS.

Ż ć

ć ż ż ć ż Ł ć ż ć

Ż ć Ż ż ć ż Ż Ż Ż ć ż Ż Ż ć

Ą

Transkrypt:

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) wiczenie trzecie Temat: Potoki i ł cza nazwane w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot

Wprowadzenie 1. Komunikacja z wykorzystaniem strumieni W systemie Linux istnieje możliwość wywołania programu jako nowego procesu i odbierania od niego, bądź wysyłania mu danych. Wykonanie takiej czynności umożliwia funkcja popen(). Łącze utworzone przy jej pomocy jest jednokierunkowe, tzn. proces wywołujący może do niego pisać lub czyta ć, ale nigdy te dwie operacje nie są dostępne jednocześnie dla tego samego łącza. Program, który jest wywoływany odczytuje dane z wejścia standardowego, natomiast program wywołujący uzyskuje dostęp do wyjścia programu wywoływanego i może odczytywać informacje, które on zapisuje do standardowego wyjś cia (jak pisałem wcześniej nigdy te ewentualności nie zachodzą równocześnie, tzn. albo program wywołujący czyta, a wywołany zapisuje, albo odwrotnie, ale nigdy oba procesy nie będą mogły pisać do tego samego łącza. 2. Potoki Inną formą komunikacji jednokierunkowej są potoki, które zwykle służą do komunikacji między dwoma spokrewnionymi procesami. Choć istnieje możliwość używania potoku tylko w obrębie jednego procesu, to nie jest to rozwiązanie, które stosuje się w praktyce. Potok tworzony jest w przestrzeni jądra, poprzez funkcję pipe(), a dostęp do niego odbywa się przy pomocy funkcji umożliwiających niskopoziomowe operacje na plikach read() i write(). Potok ma skończoną pojemność i wynosi ona co najmniej 4096 bajtów. Dla utworzonego potoku można ustawić znacznik O_NDELAY (O_NOBLOCK), który powoduje, że program nie będzie przechodził w stan oczekiwania w określonych sytuacjach, związanych z obsług ą potoku (szczegóły w następnym punkcie). 3. Ł cza nazwane, czyli kolejki FIFO Kolejka jest podobna w działaniu do potoku, ale w przeciwieństwie do niego ma nazw ę, a więc mogą z niej korzystać procesy niespokrewnione. Kolejki FIFO pojawiły się w Uniksach zgodnych ze standardem System V (właściwie to istniały już od System III). Pierwotnie tworzono je za pomocą funkcji mknod(), ale obecnie istnieje wygodniejsza w użyciu funkcja mkfifo(). Aby skorzystać z tak utworzonego łącza nazwanego należy go otworzyć albo do zapisu, albo do odczytu (to samo ograniczenie co w przypadku potoku). Dodatkowo można zastosować flagę O_NDELAY lub tożsamą jej flagę O_NONBLOCK. Powoduje to, że proces nie będzie czekał na zakończenie pewnych operacji związanych z obsług ą kolejki. Dokł adniej objaśnia to poniższa tabela: 2

Sytuacja otwarto kolejk ę tylko do czytania, ż aden proces nie otworzy ł jej do pisania otwarto kolejk ę tylko do pisania, żaden proces nie otworzy ł jej do czytania próba czytania danych z kolejki, jeśli nie ma w niej danych próba zapisania do zapełnionego łącza FIFO Nie ustawiono znacznika O_NDELAY lub O_NONBLOCK oczekiwanie, a ż proces otworzy kolejk ę do pisania oczekiwanie, a ż proces otworzy kolejk ę FIOF do czytania oczekiwanie, a ż pojawią si ę dane lub nie będzie ona otwarta do pisanie dla ż adnego procesu, jeśli żaden proces nie otworzy kolejki do pisania funkcja zwraca warto ść zero, w przeciwnym wypadku ilo ść oczytanych bajtów oczekiwanie, a ż będzie miejsce do zapisania nowych danych Ustawiono O_NDELAY lub O_NONBLOCK natychmiastowy powrót bez sygnalizowania błędu natychmiastowy powrót z sygnalizacj ą błędu w errno (umieszczenie stałej ENXIO) natychmiastowy powrót, warto ść funkcji jest równa zero jak wyżej Powyższa tabela odnosi się także do potoków. Można regu ł, którym podlega pisanie i czytanie do kolejek i potoków: również wyodrębnić kilka jeśli proces żąda przeczytania mniejszej porcji danych niż wynosi bieżąca zawartość medium, to będzie pobrane dokładnie tyle danych, ile zażądano. Reszta danych nie ulega zniszczeniu i może być odczytana przy następnej operacji czytania. Jeśli proces będzie usiłował odczytać więcej danych niż znajduje się w medium, to odczytanych i tak zostanie tylko tyle danych, ile jest w potoku lub kolejce. Jeśli proces próbuje czytać z medium, które nie zostało przez żaden inny proces otwarte do czytania, to wynikiem funkcji read() będzie zero. W przypadku kiedy ustawiony jest znacznik O_NDELAY nie można stwierdzi ć, czy medium było puste, czy nie zostało otwarte do zapisu. Zapis danych jest operacją niepodzieln ą, o ile proces zapisuje dane do medium porcjami mniejszymi od jego pojemności, 3

Jeśli proces próbuje zapisywać do medium, które nie zostało otwarte przez inny proces do zapisu, to otrzyma sygnał SIGPIPE, którego domyślna obsługa polega na zakończeniu procesu. Po skorzystaniu z kolejki należy ją usun ąć, aby nie zajmowała dysku. miejsca na 4. Opis wa niejszych funkcji popen() - funkcja uruchamia program podanego w jej argumentach procesu oraz tworzy strumień służący do komunikacji między procesem wywołanym a wywołującym, który można obsługiwać standardowymi funkcjami fread() i fwrite(). Szczegóły: popen. fread() - służy do odczytu buforowanego ze strumienia. Szczegóły: fread. fwrite() - służy do zapisu buforowanego do strumienia. Szczegóły: fwrite. funkcja pclose() - służy do zamykania strumienia stworzonego przez popen(). Szczegóły: pclose. funkcja pipe() - służy do tworzenia potoku łączącego dwa spokrewnione procesy, jaka argument przyjmuje dwuelementową tablic ę, w której będą zapisane deskryptory potoku. Deskryptor zerowy jest do odczytu, a pierwszy do zapisu. Zwykle jest ona wywoływana przed fork(), co powoduje, że deskryptorów. Każdy jeśli procesy powstałe komunikacja przebiega według w wyniku podziału odziedziczą tablicę z tych procesów zamyka jeden z deskryptorów, np. schematu: rodzic -> potomek, to rodzic zamyka deskryptor do odczytu, a potomek do zapisu. Szczegóły: pipe funkcja read() - czyta określoną ilość bajtów z deskryptora bez buforowania. Szczegóły: 2 read. funkcja write() - pisze określoną ilość bajtów do deskryptora bez buforowania. Szczegóły: 2 write. funkcja close() zamyka deskryptor pliku. Do zamykania strumieni służy fclose(). Szczegóły: close. funkcja mkfifo() - tworzy łącze nazwane o podanej nazwie i atrybutach, 4

może by ć zastąpiona przez mknod(). funkcja open() otwiera plik (również łącze nazwane). Możliwe jest dzięki niej ustalenie trybu otwarcia i ustawienie znaczników. Szczegóły: 2 open. funkcja fcntl() - służy do ipulacji deskryptorem pliku. Można dzięki niej ustawić flagę O_NDELAY (O_NONBLOCK) dla potoku. Szczegóły: fcntl. funkcja perror wypisuje wiadomość o błędzie zwróconą przez system. Przykład użycia: if(fork() < 0) perror( fork: ); Szczegóły: 3 perror. funkcja unlink funkcja ta usuwa z systemu plików nazw ę, która może odnosić się do dowiązania lub pliku (ostatni przypadek odpowiada operacji usunięcia pliku). Można ją wykorzystać do automatycznego usuwania łącza nazwanego. Szczegóły: 2 unlink. Zadania: 1. Napisz program, który wywoła polecenie sort nazwa.c, gdzie nazwa.c jest nazwą pliku z kodem źródłowym programu, a następnie odczyta 20 znaków zwróconych przez to polecenie i wyświetli je na ekran. 2. Napisz program, który uruchomi polecenie wc i przekaże mu na standardowe wejście dowolne zdanie. 3. Napisz program, który stworzy potok, i wykorzysta go do przesyłania obrębie jednego procesu. danych w 4. Napisz program, który stworzy potok i wykorzysta go do komunikacji między dwoma spokrewnionymi procesami. Zadanie wykonaj dla dwóch przypadków: z ustawion ą flag ą O_NDELAY (O_NONBLOCK) i bez. 5. Napisz program, który podzieli się na dwa procesy komunikujące pomocy potoków. Komunikacja musi by ć dwukierunkowa. się przy 6. Napisz dwa niezależne programy, które będą się komunikowały przy pomocy kolejki FIFO. Zadanie wykonaj w dwóch wariantach, tak jak zadanie 4. Po zakończeniu komunikacji kolejk ę należy usun ąć. 5