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

Podobne dokumenty
eć dzielona standardu POSIX

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.

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

4.2 Sposób korzystania z l acza

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

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

przypadków wywo lanie systemowe (funkcja systemowa) lub funkcja biblioteczna zwraca wartość 1(czasamiNULL) iprzypisujezmiennej zewn etrznej,

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

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

Kolejki FIFO (łącza nazwane)

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

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

Łącza nienazwane(potoki)

Systemy Operacyjne - Operacje na plikach

Ghost in the machine

Systemy Operacyjne Ćwiczenia

ezykach wysokiego poziomu (Dijkstra, 1965). semaphore semaphore S; Operacje na semaforze:

Biblioteka standardowa - operacje wejścia/wyjścia

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

przerwany proces móg l zareagować na określone zdarzenie. Można je traktować jako software owe wersje przerwań sprz etowych.

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

Obsługa plików Procesy

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

sposób wykonywania operacji zapisu i odczytu dane odczytywane z l acza usuwane (nie można ich odczytać ponownie),

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

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

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

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

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane

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

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

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.

Znaki globalne w Linuxie

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Funkcje zawarte w bibliotece < io.h >

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

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

Wykład PASCAL - Pliki tekstowe

Programowanie w językach

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Funkcje zawarte w bibliotece < io.h >

System plików warstwa logiczna

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

Programowanie i struktury danych

Paradygmaty programowania. Paradygmaty programowania

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

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

Iteracyjny serwer TCP i aplikacja UDP

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

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

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

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

Programowanie Proceduralne

Funkcje systemu Unix

Podstawy i języki programowania

1. Procesy i współbieżność

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

Uruchamianie SNNS. Po uruchomieniu. xgui & lub snns & pojawia si e okno. programu. Symulator sztucznych sieci neuronowych SNNS 1

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Argumenty wywołania programu, operacje na plikach

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Konfiguracja programu ODBCImportYOTOGI do pracy z systemem Yotogi.

Rozdzia l 3. Laboratorium 3. danych zawierajac

Paradygmaty programowania. Paradygmaty programowania

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

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

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

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

INSTRUKCJA OBSŁUGI PRZYSTAWKI PEN-01 DO PENDRIVE A

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

Rozdzia l 11. Przestrzenie Euklidesowe Definicja, iloczyn skalarny i norma. iloczynem skalarnym.

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

W pierwszej kolumnie wyświetlany jest identyfikator procesu (pid)

ROZPROSZONE SYSTEMY OPERACYJNE. Niezawodne usługi w rozwiązaniach SSI dokumentacja projektu. Karol Ostrowski 16 czerwca 2005

Instytut Teleinformatyki

Podręcznik użytkownika

pami eć operacyjna przechowuje dane do przetworzenia, tymczasowe dane pomocnicze,

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

Wyznaczniki, macierz odwrotna, równania macierzowe

systemu operacyjnego UNIX Funkcje jadra Spis treści Dariusz Wawrzyniak 20 października Wst ep 5

Pliki. Operacje na plikach w Pascalu

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Spis treści. 1 Moduł Modbus TCP 4

1 Moduł Modbus ASCII/RTU 3

INSTRUKCJA OBSŁUGI PROGRAMU DO ODCZYTU PAMIĘCI FISKALNEJ DATECS OPF

Plik jest poj eciem, z którym spotyka si e niemal każdy użytkownik systemu komputerowego, nawet

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Systemy mikroprocesorowe - projekt

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

Paradygmaty programowania

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

Organizacja systemu plików

Transkrypt:

c Wies law P laczek 15 4 Potoki 4.1 Wprowadzenie Potok (ang. pipe) możnauznaćzaplikspecjalnegotypuktórys lużydoprzechowywania ograniczonej ilości danych i do którego dost ep może si eodbywaćjedyniewtrybie FIFO (ang. first-in first-out element umieszczony w buforze pierwszy również pierwszy opuści bufor). Maksymalna liczba bajtów jak amożnazapisaćwpotoku jest określona sta l a PIPE BUF której definicja znajduje si ewplikunag lówkowym<limits.h> lub <sys/param.h>. Potoki zapewniaj aprostysynchroniczny sposób wymiany danych mi edzy procesami. Dane zapisywane s anajedym końcu potoku aodczytywane na drugim jego końcu przyczymodczytane dane s azpotoku usuwane. System zapewnia synchronizacj e mi edzy procesem zapisuj acym i odczytuj acym. Domyślnie jeśli ten pierwszy spróbuje zapisać dane do pe lnego potoku tozostanieprzezsystem automatycznie zablokowany do czasu gdy potok b edzie w stanie je odebrać. Podobnie proces odczytuj acy który podejmie prób epobraniadanychzpustego potoku zostanie zablokowany do czasu kiedy pojawi asi ejakieśdane. Dozablokowania dojdzie również wtedy gdy potok zostanie otwarty przez jeden proces do odczytu alenie zostanie otwarty przez inny proces do zapisu. Dane można zapisawać do potoku za pomoc afunkcjiwrite aodczytywać zniegoza pomoc afunkcjiread (niebuforowane funkcje wejścia/wyjścia). Pliki w l aczane Prototyp ssize t write(int filedes const void *buf size t nbyte); wartość Liczba zapisanych bajtów 1 Tak Funkcja write podejmuje prób ezapisanianbyte bajtów danych wskazywanych przez parametr buf do pliku określonego deskryptorem filedes. Jeśli funkcja write zakończy si e sukcesem to zwróci liczb erzeczywiściezapisanychbajtów. Pliki w l aczane Prototyp ssize t read(int filedes void *buf size t nbyte); wartość Liczba odczytanych bajtów 1 Tak Funkcja read odczytuje nbyte bajtów danych z pliku o desktryptorze filedes i umieszcza je w miejscu pami eci określonym wskaźnikiem buf. Pozytywniezakończonazwraca liczb e rzeczywiście odczytanych bajtów. W przypadku dojścia do końca pliku zwracana jest wartość 0. ) Co to jest deskryptor pliku? W systemie UNIX z każdym otwartym przez proces plikiem zwi azana jest pewna nieujemna liczba ca lkowita zwana deskryptorem pliku. Deskryptory o numerach 0 1 i 2

c Wies law P laczek 16 zwi azane s a odpowiednio ze standardowymi strumieniami: wejścia wyjścia i wyjścia b l edów (maj a one swoje symboliczne nazwy odpowiednio: STDIN FILENO STDOUT FILENO i STDERR FILENO). Deskryptory s luż adoodwo lywaniasi edoplikówprzezniektórefunkcje systemowe. Deskryptory plików procesu macierzystego s adziedziczoneprzezprocesy potomne. Liczba deskryptorów które mog abyćdost epne procesowi jest ograniczona. W starszych wersjach Uniksa nie mog la ona przekroczyć 20 w nowszych wersjach liczba ta może być znacznie wi eksza (można j asprawdzićprzypomocykomendyulimit -n pow loki bash). Deskryptor pliku można utworzyć np. przy pomocy funkcji systemowej open. Pliki w l aczane <sys/types.h> <sys/stat.h> <fcntl.h> Prototyp int open(const char *path int flags mode t mode); wartość Deskryptor pliku 1 Tak Pomyślnie wykonana funkcja open otwiera plik i zwraca jego deskryptor. Parametry: path ścieżkowa nazwa pliku flags opcje mode prawa dost epu do pliku (stosuje si ezapiswsystemieósemkowym) np. rw-r--r--! wsystemiebinarnym:110100100! w systemie ósemkowym: 0644 Opcje flags (ważniejsze): O RDONLY otwórz plik do czytania O WRONLY otwórz plik do pisania O RDWR otwórz plik do czytania i pisania O CREAT jeśli plik nie istnieje to stwórz go O EXCL przy równocześnie ustawionej fladze O CREAT przekaż b l ad jeśli plik już istnieje O TRUNC jeśli plik istnieje zmniejsz jego d lugość do zera (obetnij go) O APPEND otwórz plik w trybie dopisywania na jego końcu. Opcje można l aczyć przy pomocy sumy bitowej np. O WRONLY O CREAT O TRUNC. Deskryptor przypisany do pliku można zwolnić używaj ac funkcji systemowej close. Pliki w l aczane Prototyp int close(int filedes); Pomyślnie zakończona funkcja close zamyka plik tzn. zwalnia używany przez niego deskryptor. Dzi eki temu deskryptor ten może być użyty ponownie jeszcze przed zakończeniem wykonywania procesu. W chwili zakończenia wykonywania procesu wszystkie używane przez ten proces pliki s aautomatyczniezamykane. Dodobregostyluprogramowania należy jednak jawne zamykanie plików które nie s ajużpotrzebne(jakwiadomo

c Wies law P laczek 17 porz adek w programie jest nie tylko kwesti aestetykialecz esto pozwala unikn ać różnych problemów szczególnie przy dalszym rozwoju programu). Funkcj e close można stosować również do deskryptorów o numerach 0 1 i 2 tzn. standardowych strumieni WE/WY. Plik można usun ać przy pomocy funkcji systemowej unlink. Pliki w l aczane Prototyp int unlink(const char *path); Funkcja unlink pomyślniezakończonausuwadowi azanie do pliku o nazwie ścieżkowej path zkataloguorazzmniejszao1licznikdowi azań do tego pliku przechowywany w i-w eźle (ang. i-node) jeśli licznik ten przyjmie wartość 0 to plik zostanie usuni ety. 4.2 Potoki nienazwane Potoki nienazwane mog a l aczyć tylko procesy pokrewne np. macierzysty i potomny dwóch braci dziadka i wnuka itd. Do ich tworzenia s luży funkcja systemowa pipe. Pliki w l aczane Prototyp int pipe(int filedes[2]); W przypadku poprawnego wykonania funkcja pipe zwraca dwa deskryptory plików: filedes[0] i filedes[1] któreodnosz asi edodwóchstrumienidanych. Wobecnych wersjach systemu UNIX funkcja pipe nierzadko wyst epuje w dwóch odmianach. Jedna znichs lużydotworzeniapotoków jednokierunkowych (pó ldupleks) a druga do tworzenia potoków dwukierunkowych (pe lny dupleks). To która z nich jest wywo lywana domyślnie zależy od ustawień systemowych najlepiej sprawdzić to w man pipe. Wpe lnym dupleksie plik filedes[0] s luży do zapisu danych a filedes[1] do ich odczytu i odwrotnie. Natomiast w konfiguracji pó ldupleksowej plik filedes[1] jest zawsze używany do zapisu a filedes[0] zawsze do odczytu próba użycia ich na odwrót kończy si eb l edem. Linux stosuje rozwi azanie pó ldupleksowe. Od wersji j adra o numerze 2.6.27 w Linuksie dost epna jest również specyficzna dla tego systemu funkcja pipe2 szczegó lymożnaznaleśćwman 2 pipe.! Uwaga: Proces powinien zamykać (najlepiej na samym pocz atku) koniec potoku którego nie b edzie używa l (tzn. zwalniać odpowiedni desktryptor funkcj a close) nie jest to konieczne ale może uchronić przed ewentualnymi b l edami!

c Wies law P laczek 18 ĆWICZENIE 4: Producent Konsument: Potoki Nienazwane Przy pomocypotoków nienazwanych systemu UNIX zaimplementować problem Producenta i konsumenta. Dlazademonstrowaniażeniedosz lodoutratyanizwielokrotnienia towaru niechproducent pobiera surowiec (np. porcje bajtów) z pliku tekstowego iwstawiagojakotowar do potoku akonsument niech umieszcza pobrany z potoku towar w innym pliku tekstowym (porcje danych Producenta i Konsumenta nie musz abyć równe). Po zakończeniu dzia lania programów (wyczerpaniu zasobów surowca ) oba pliki tekstowe powinny być identyczne (można to sprawdzić poleceniem di -s którenajlepiej umieścić w pliku Makefile po poleceniu uruchomienia programu). Oba procesy niech drukuj aodpowiedniekomunikatynaekraniewtymtowar któryprzesy laj a. Do zasymulowania różnych szybkości dzia lania programów użyć funkcji sleep np.zlosowymczasem usypiania. Do czytania/pisania danych z/do pliku tekstowego jak również wypisywania ich na ekran użyć funkcji read i write.

c Wies law P laczek 19 4.3 Potoki nazwane (potoki FIFO) Drugi rodzaj potoków wyst epuj acych w systemie UNIX stanowi a potoki nazwane (określane także mianem potoków FIFO). Różni asi eoneodpotokównienazwanychg lównie tym że towarzysz aimwpisywwykazachplikówodpowiednichkatalogów.zatemwprogramach mog abyćtraktowanejakzwyk lepliki. Dzi eki temu potoki FIFO mog a l aczyć niezależne procesy a nie tylko pokrewne jak w przypadku potoków nienazwanych. Dodatkowo potoki FIFO można tworzyć nie tylko z poziomu programu ale również z poziomu pow loki (z linii poleceń). Dzi eki temu potoków FIFO można latwo używać w programach pisanych nie tylko w j ezykach C/C++ ale w dowolnych j ezykach które posiadaj aoperacje czytania/pisania w plikach. Do tworzenia potoków FIFO zliniikomends lużypoleceniemkfifo 3. Sk ladnia tego polecenia jest nast epuj aca: mkfifo [-m mode] file name gdzie file name jest nazw a pliku specjalnego FIFO któryb edzie używany jako potok FIFO a(opcjonalny)mode oznacza prawa dost epu (jak dla zwyk lego pliku np. 644). Plik specjalny FIFO wwykaziezawartościkatalogu(komendals -l) jestoznaczonyliter a p (od pipe) wpierwszejkolumnieatrybutówpliku. Zpoziomuprogramupotoki FIFO można tworzyć przy pomocy funkcji bibliotecznej mkfifo 4. Pliki w l aczane <sys/types.h> <sys/stat.h.> Prototyp int mkfifo(const char *path mode t mode); Funkcja mkfifo tworzy potok FIFO onazwieścieżkowejpath iprawachdost epu określonych parametrem mode wsystemieósemkowymnp.0644. ĆWICZENIE 5: Producent Konsument: Potoki Nazwane Przy pomocy potoków nazwanych systemu UNIX zaimplementować problem Producenta i Konsumenta z ćwiczenia 4. (a) Utworzyć potok FIFO z poziomu programu a nast epnie uruchomić procesy Producenta i Konsumenta wtymsamymprogramie(wprocesiemacierzystymipotomnym lub w dwóch potomnych). (b) Sprawdzić że potoki FIFO dzia laj a dla niezależnych procesów przez utworzenie potoku FIFO z linii komend oraz uruchomienie procesów Producenta i Konsumenta niezależnie z poziomu pow loki np. w różnych terminalach można użyć polecenia: xterm -hold -title nazwa okna -e nazwa programu & dla każdego z tych procesów w pliku Makefile (jak też tworzenie/usuwanie potoku). 3 Istnieje również bardziej ogólne polecenie o nazwie mknod do tworzenia tzw. plików specjalnych w tym m.in. potoków FIFO szczegó ly można znaleźć w man mknod. 4 Istnieje także funkja systemowa mknod odpowiednik polecenia mknod (patrz: man 2 mknod).