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

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

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

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

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

4.2 Sposób korzystania z l acza

Wykład PASCAL - Pliki tekstowe

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.

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

Łącza nienazwane(potoki)

Pliki. Operacje na plikach w Pascalu

Biblioteka standardowa - operacje wejścia/wyjścia

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

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

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

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

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

Podstawy i języki programowania

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

Klient poczty elektronicznej - Thunderbird

Działanie systemu operacyjnego

System plików warstwa logiczna

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

Systemy Operacyjne - Operacje na plikach

IPC: Kolejki komunikatów

Programowanie w językach

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

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

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

Klient-Serwer Komunikacja przy pomocy gniazd

Działanie systemu operacyjnego

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

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

1 Przygotował: mgr inż. Maciej Lasota

ć Ę Ę ć Ę ć Ę Ę Ę

Ą Ą

Ę Ą Ł Ę Ł ć

ć Ę ć ć ć ć ą

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

Ą Ą Ł

Ę Ą Ż ć Ę Ż Ł ź

ż

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Znaki globalne w Linuxie

Funkcje zawarte w bibliotece < io.h >

Programowanie w języku Python. Grażyna Koba

Program dla praktyki lekarskiej

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Działanie systemu operacyjnego

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

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

UMOWY INSTRUKCJA STANOWISKOWA

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

Wiadomości i umiejętności

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

Funkcje zawarte w bibliotece < io.h >

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

REJESTRACJA PROJEKTÓW

Podstawy programowania w języku C++

Technologie Informacyjne - Linux 2

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Działanie systemu operacyjnego

SYSTEMY OPERACYJNE ĆWICZENIE POLECENIA SYSTEMU MSDOS

Opis programu Profbi Delegacje 2013 Delegacje Krajowe i Zagraniczne.

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

Bash - wprowadzenie. Bash - wprowadzenie 1/39

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

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

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

Języki programowania imperatywnego

Warsztaty dla nauczycieli

Zwielokrotnianie wejścia wyjścia

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

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

2. System uprawnień w linuxie

1 Moduł Modbus ASCII/RTU 3

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

Podręczna pomoc Microsoft Power Point 2007

Statyczne i dynamiczne predykaty

Ustalanie dostępu do plików - Windows XP Home/Professional

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

Zakład Systemów Rozproszonych

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

Programowanie w językach wysokiego poziomu

Narzędzia informatyczne w językoznawstwie

Nowe funkcje w wersji 2 hafciarki PR-650

Powłoka, redyrekcja, potok

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

TM PROGRAM TERMINALA RS232 DLA MULTIPLEKSERA 8XRS232 / ETHERNET 10BASE-T


ć Ę ć Ę ź Ę

Ę Ż ż Ł ź ż ż ż ż

DHL24 SZABLONY PRZESYŁEK. Warszawa, listopad 2017

Transkrypt:

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie trzecie (jedne zajęcia) Temat: Potoki i łącza nazwane w Linuksie. Opracowanie: dr in ż. Arkadiusz Chrobot

Wprowadzenie 1. Komunikacja z wykorzystaniem strumieni W systemach uniksowych istnieje możliwość utworzenia nowego procesu realizującego wybrane polecenie powłoki i stworzenia dla niego łącza komunikacyjnego za pomocą tyko jednego wywołania funkcji. Tą funkcją jest funkcja popen(). Łącze utworzone przy jej pomocy jest jednokierunkowe, tzn. proces wywołujący może do niego pisać lub z niego czyta ć, ale nigdy te dwie operacje nie są dostępne jednocześnie dla tego samego łącza. Łącze należy zamykać za pomocą funkcji pclose(). Jest ono wiązane ze standardowym wejściem lub wyjściem polecenia, w zależności od rodzaju operacji, czyli domyślnie zastępuje klawiatur ę lub ekran. 2. Potoki Inną formą komunikacji jednokierunkowej są potoki ( łącza nienazwane), które zwykle służą do wymiany informacji 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, ale poprzez wywołanie funkcji pipe() w przestrzeni uż ytkownika, a dostęp do niego odbywa się przy pomocy funkcji umożliwiających niskopoziomowe operacje na plikach read() i write(). Ma on skończoną pojemno ść, której wielość zależy od konfiguracji systemu. W nowszych wersjach Linuksa wynosi ona 64KiB. Dla utworzonego potoku można ustawić znacznik O_NONBLOCK, który powoduje, że program nie 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ę oficjalnie w systemach uniksowych zgodnych z wersją o nazwie 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_NONBLOCK. Powoduje to, że proces nie czekał na zakończenie pewnych operacji związanych z obsługą kolejki. Dokł adniej objaśnia to poniższa tabela: 2

Sytuacja Próba otwarcia kolejki tylko do czytania, żaden proces nie otworzył jej do pisania. Próba otwarcia kolejki tylko do pisania, żaden proces nie otworzył jej do czytania. Nie ustawiono znacznika O_NONBLOCK Oczekiwanie, aż proces otworzy kolejkę do pisania. Oczekiwanie, aż proces otworzy kolejkę FIFO do czytania. Próba czytania danych Oczekiwanie, aż pojawią z kolejki, jeśli nie ma się dane. Jeśli żaden w niej danych. proces nie otworzył kolejki do pisania, to funkcja zwraca wartość zero. Jeśli w kolejce pojawią się dane, to funkcja zwróci liczb ę oczytanych bajtów. Próba zapisania do zape- łącza łnionego FIFO. Oczekiwanie, aż miejsce do zapisania nowych danych. Ustawiono znacznik O_NONBLOCK Natychmiastowy powrót bez sygnalizowania błędu. Natychmiastowy powrót z sygnalizacj ą błędu. Jeśli kolejka jest pusta to funkcja natychmiast powraca, zwracając wartość -1. Jeśli kolejka nie jest otwarta do zapisu, to funkcja również natychmiast wraca zwracając warto ść 0. Funkcja write() wraca natychmiast zwracając warto ść 0. Dwa ostatnie wiersze powyżej tabeli odnoszą się także do potoków. Można również wyodrębnić kilka regu ł, którym podlega pisanie i czytanie do kolejek i potoków: proces żąda przeczytania mniejszej porcji danych niż wynosi bieżąca zawartość medium, to pobrane dokładnie tyle danych, ile zażądano. Reszta danych nie ulega zniszczeniu i może być odczytana przy następnej operacji czytania. proces 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. proces próbuje czytać z medium, które nie zostało przez żaden inny proces otwarte do pisania, to wynikiem funkcji read() zero. W przypadku kiedy ustawiony jest znacznik O_NONBLOCK zachowanie funkcji read() jest takie samo. Zapis danych jest operacją niepodzieln ą, o ile proces zapisuje dane do medium porcjami mniejszymi od jego pojemności, 3

proces próbuje zapisywać do medium, które nie zostało otwarte przez inny proces do odczytu, 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 polecenie powłoki podane w jej argumentach wywołania 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: man 3 popen. fread() - służy do odczytu buforowanego ze strumienia. Szczegóły: 3 fread. fwrite() - służy do zapisu buforowanego do strumienia. Szczegóły: 3 fwrite. man man Funkcja pclose() - służy do zamykania strumienia stworzonego przez popen(). Szczegóły: man 3 pclose. Funkcja pipe() - służy do tworzenia potoku łączącego dwa spokrewnione procesy. Jako argument wywołania 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: man 2 pipe Funkcja read() - czyta określoną liczbę bajtów z deskryptora bez buforowania. Szczegóły: man 2 read. Funkcja write() - zapisuje określoną liczbę bajtów do deskryptora bez buforowania. Szczegóły: man 2 write. Funkcja close() zamyka deskryptor pliku. Do zamykania strumieni służy fclose() lub pclose(). Szczegóły: man 2 close. 4

Funkcja mkfifo() - tworzy łącze nazwane o podanej nazwie i atrybutach, może by ć zastąpiona przez mknod(). Szczegóły: man 3 mkfifo Funkcja open() otwiera plik (również łącze nazwane). Możliwe jest dzięki niej ustalenie trybu otwarcia i ustawienie znaczników. Szczegóły: man 2 open. Funkcja fcntl() - służy do manipulacji deskryptorem pliku. Można niej ustawi ć flag ę O_NONBLOCK dla potoku. Szczegóły: man 2 fcntl. dzięki Funkcja perror() wypisuje wiadomość o błędzie zwróconą przez system. Przykład użycia: if(fork() < 0) perror( fork ); Szczegóły: man 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: man 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 dowolny ciąg znaków. 3. Napisz program, który stworzy potok, i wykorzysta go do przesyłania w obrębie jednego procesu. danych 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_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 ąć. 7. Napisz program, w którym komunikacja między spokrewnionymi procesami odbywała się w jednym kierunku za pomocą łącza nienazwanego, a w drugim za pomoc ą łącza nazwanego. 5

8. Stwórz programy do dialogu między dwoma użytkownikami w systemie. Do komunikacji użyj łącza FIFO stworzonego za pomoc ą funkcji mknod. 9. Napisz program, który wygeneruje cztery procesy. Każdy z tych procesów się komunikował z następnym za pomocą łącza nienazwanego. Pierwszy proces wyśle przez swoje łącze liczby 1,2,3 i 4. Każdy kolejny zwiększy każdą z nich o 1, a ostatni wypisze je na ekranie. 10. Napisz trzy programy komunikujące się przez łącza FIFO. Pierwszy program wysyłał kolejne liczby parzyste, drugi kolejne liczby nieparzyste, a trzeci odbierał te liczby i je sumowa ł. Wszystkie procesy powinny wyświetlać wyniki pracy na ekranie. 6