UNIX 7. Deskriptory a proudy

Slides:



Advertisements
Podobné prezentace
Obecně o operačních systémech
Advertisements

Programovací jazyk C++
Vytváření, použití dávkových souborů
SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
Správce virtuálních strojů Martin Sloup Natalia Rubinova Jiří Kučera.
M. Štulc, J. Šváb, J. Kolena SIMULACE OPERAČNÍHO SYSTÉMU
Souborové systémy.
PHP Práce se soubory v PHP - 13
Operační systém Adam Greguš, 4.A.
Vzdělávací materiál / DUMVY_32_INOVACE_02B10 Příkazový řádek: úvod AutorIng. Petr Haman Období vytvořeníListopad 2012 Ročník / věková kategorie3. ročník.
Přístupová práva, maska přístupových práv Jiří Hořejší.
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B8 Autor Ing. Jiří Kalousek Období vytvoření listopad.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Maturitní okruh č. 7. Odstínit aplikace od specifik HWSpráva procesůSpráva pamětiSpráva souborůSpráva vstupů a výstupůSpráva sítěSystém ochrany a bezpečnostiSystém.
Shell Team Jan Kupka Petr Kykal Tomáš Paríšek si Vám dovoluje představit
Operační systémy.
Ing. Libor Měsíček, Ph.D. CN460
Práce se soubory Soubory se používají pro ukládání dat pro pozdější použití. Dalším a lepším způsobem jak ukládat data je použití databáze. Soubory se.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
Správce virtuálních strojů Natalia Rubinova Martin Sloup Jiří Kučera.
Sedmé cvičení Soubory Vstupně/výstupní proudy. Java cv72 Soubory Třída File Objekt popisující soubor na filesystému Nedá se z něho přímo číst a psát Představuje.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
2 Fučíková Sylvie HR/Win – moderní technologie pro osvědčené aplikace.
OPERAČNÍ SYSTÉMY (OS): Programy, které obsluhují základní rutiny počítače a bez nichž by žádný další program nemohl na počítači běžet. Konkrétní programy.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
Operační systémy. Operační systémy Operační systém je základním programovým vybavením nezbytně nutným pro provoz počítače. Poznámka: Operační systém.
Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při třídění vyhodnocování regulárních výrazů Je třeba použít.
Příkazový řádek v OS Windows
Správce virtuálních strojů Natalia Rubinova Martin Sloup Jiří Kučera.
Operační systém GNU Linux
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
OPERAČNÍ SYSTÉMY.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Operační systém GNU Linux Příkazy pro práci se soubory.
Operační systém UNIX Příkazové prostředí UNIXu: příkaz [argumenty] [jméno] Ve jménech příkazů a parametrech se rozlišují malá a velká písmena.
Operační systém GNU Linux
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Operační systémy cvičení 1 © Milan Keršláger Obsah: náplň předmětu,
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
UNIX 4. Soubory a proudy © Milan Keršlágerhttp:// Obsah: ● soubor, přípona, speciální.
BEZPEČNOSTNÍ TECHNOLOGIE I Operační program Vzdělávání pro konkurenceschopnost Projekt: Vzdělávání pro bezpečnostní systém státu (reg. č.: CZ.1.01/2.2.00/ )
FTP-SSL FTP-SSL Martin Dušek Martin Fúsek Josef Vlček.
UNIX 12. Komunikace mezi procesy © Milan Keršláger
Stránkování MATĚJ JURIČIČ 2015/2016 EP1 SPŠ A VOŠ JANA PALACHA KLADNO.
SOFTWARE Operační systémy.
SW počítače - operační systém
Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Úvod do Pythonu – IO operace se soubory.
Vlastnosti souborů Jaroslava Černá.
UNIX 7. Soubory a proudy © Milan Keršláger
Identity management v UIS
Operační systémy 9. Spolupráce mezi procesy
UNIX 7. Deskriptory a proudy
Linux-příkazový řádek
Správa disků
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
TELNET, FTP.
Systém souborů 1.
Command line nástroje Jednoúčelové, ale mocné nástroje pro transformace textu Jak získat: Linux (a Mac) – součást operačního systému Windows – musí se.
Transkript prezentace:

UNIX 7. Deskriptory a proudy Obsah: deskriptor, funkce pro práci se souborem mazání otevřených souborů, důsledky standardní proudy – vznik a použití přesměrování, kolona, filtr © Milan Keršláger http://www.pslib.cz/ke/slajdy 2. 4. 2014 http://creativecommons.org/licenses/by-nc-nd/3.0/

Soubory a proudy již víme, co je soubor a adresář vzniká otázka, jak se s nimi pracuje programátor (uživatel) zná název (+cestu) jádro OS neumí dobře pracovat se jmény souborový deskriptor abstraktní klíč → definuje POSIX pro jazyk C → file handle malé celé číslo (0, 1, 2, 3, …) index do tabulky otevřených souborů

Práce se souborem systémová volání jádra operačního systému řekneme jméno a požadovanou operaci získáme souborový deskriptor dále již používáme jen deskriptor ukončíme práci s deskriptorem → uvolnění knihovní funkce (jazyk C) základní nízkoúrovňové operace fopen, fclose, fread, fwrite, ... interně používají systémové volání vracejí strukturu FILE → datový proud (stream)

open() systémové volání pro otevření souboru příznaky: int open (const char *cesta, int flag,...); příznaky: O_RDONLY → jen pro čtení O_WRONLY → jen pro zápis O_RDWR → pro čtení i zápis doplňující parametry: O_APPEND (jen přidávání), O_CREAT (vytvoření), O_TRUNC (vymazání dat), O_EXCL (chyba, jeli O_CREAT a existuje), O_NONBLOCK (volání selže místo zablokování, je-li bez dat)

Offset v souboru soubor není jako RAM nelze číst libovolný bajt čtení i zápis probíhají z určité pozice jádro si musí pamatovat pozici (offset) počítána v bajtech od začátku další zápis (čtení) automaticky na následující pozici změna pozice pouze pomocí volání lseek() problém s velkými soubory původně 32bitové číslo → 2 GiB moderní systémy implicitně 64bitový

Další systémová volání read() čtení z deskriptoru čte se do bufferu, je dán maximální počet bajtů write() zápis do deskriptoru zápis z bufferu, je dán maximální počet bajtů close() uzavření deskriptoru unlink() smazání zadaného názvu souboru z adresáře

Mazání otevřených souborů běžná praxe v unixových systémech název je jen položka v adresáři (+ odkaz na i- uzel) i-uzel s metadaty existuje nezávisle na jménu využíváno u dočasných souborů fd=open('/tmp/data', O_CREAT | O_EXCL); unlink('/tmp/data'); ... volání funkcí read(), write() close(fd); soubor je založen a vzápětí smazán protože je otevřen, lze zapisovat i číst data v souboru nikdo jiný ale soubor nevidí teprve po uzavření souboru jsou data z disku uvolněna

Důsledky odloženého mazání data jsou uvolněna až později na disku není volné místo ihned po smazání program, ve kterém je otevřen, musí být ukončen aktualizace, prelink v paměti je stále starší verze kompatibilita v MS Windows nelze částečně řešeno pomocí O_TEMPORARY tento speciální příznak obsluhuje knihovna způsobuje potíže při psaní přenositelných programů

Aktualizace (1) aktualizace programu program je spuštěn (běží) proběhne aktualizace souboru starý je smazán, nový je vytvořen v RAM stále běží stará verze programu → je nutné program RESTARTOVAT typicky démon poskytující nějakou službu nezbytné u bezpečnostních aktualizací bez restartu může program havarovat snaží se natáhnout komponentu z disku, ale ta je novější lze vyzkoušet u Firefoxu je chyba, že si Firefox o restart sám neřekne

Aktualizace (2) aktualizace knihoven stejný problém jako v předchozím případě bezpečnostní aktualizace knihovny může ohrozit všechny programy, které používají starší verzi na rozdíl od Windows jsou v Linuxu masivně sdíleny řešením je RESTART všech dotčených programů při startu programu je do paměti zavedena nová verze knihoven (podle jejich názvů)

prelink rozmístění sdílených knihoven v paměti každá knihovna svoje místo (adresy) je-li jiná knihovna na stejném místě → konflikt druhá musí být uložena na jinou adresu → duplikace ve 32bitovém systému je malý adresní prostor Microsoft optimalizuje DLL pro svoje aplikace prelink projde všechny (často používané) binárky (podle atime), zjistí jejich dynamické knihovny, spočítá co nejideálnější nekonfliktní rozložení knihoven v paměti → změna knihovny na disku běžící program musí být restartován (nebo reboot)

Práce s adresářem opendir() otevření adresáře a nastavení na první položku readdir() vrací přečtenou položku a posune na další položku closedir() uzavření adresáře rewinddir() nastavení na první položku v adresáři ...

Standardní proudy standardní chování unixových systémů proces má při startu otevřeny 3 deskriptory (proudy): 0 – stdin → klávesnice (standardní vstup) 1 – stdout → terminál   (standardní výstup) 2 – stderr → terminál    (standardní chybový výstup) přípravu deskriptorů zajišťuje VŽDY rodič (shell) DOS, Windows – každý program sám → nekompatibility chce-li program číst vstup, čte z deskriptoru 0 chce-li program zapsat výstup, použije 1 nebo 2 využívá se při přesměrování vstupu/výstupu

Původ 0, 1 a 2 nastavení pomocí specializovaného ioctl() při startu systému: první je spuštěn init pro konzoli spustí program getty sdělí programu identifikaci konzole (číslo) getty použije ioctl() pro připojení 0, 1 a 2 getty vypíše login: uživatel zapíše jméno a heslo, getty je zkontroluje getty se změní na shell → exec() dědí deskriptory uživatel zapíše příkaz → potomek dědí deskriptory po odhlášení se ukončí shell a init spustí nové getty

Vznik příkazového řádku getty() jméno + heslo Místo getty může čekat ssh démon (přihlášení ze sítě). exec('/bin/bash') shell ls fork() exec('ls') ls výpis adresáře wait()

Přesměrování vstupu/výstupu využívají se standardní proudy každý program používá deskriptory 0, 1 a 2 démon je zavírá → s uživatelem nekomunikuje rodič pozmění cíl těchto deskriptorů tj. shell je mění podle značek <, >, 2>, >> atd. potomek dědí nastavení deskriptorů tj. spuštěný program (např. ls, cat, grep, ...) potomek používá pro vstup/výstup stále 0, 1 a 2 místo na terminál pak zapisuje program do souboru místo z klávesnice čte z předchozího procesu (kolona) atd.

Přesměrování – BASH > >> < <<X 2>&1 Přesměrování výstupu neexistující soubor je vytvořen, existující je přepsán >> Přesměrování vstupu neexistující soubor je vytvořen, u existujícího přidání za konec < standardní vstup je čten z existujícího souboru <<X Přesměrování vstupu – tzv. „here document“ standardní vstup je čten ze stejného vstupu (nejčastěji ze skriptu) až ke značce X 2>&1 Sloučení stderr (2) se stdout (1) zapisuje se až za přesměrování (ale ev. před znak kolony) Příklady: ls > vystup.txt find /proc > vystup.txt 2>&1 unix2dos < vystup.txt > dos.txt

Realizace přesměrování shell ls > vypis.txt fork() fd = open('vypis.txt', O_CREAT); dup2(fd, stdout); close(fd); exec('ls') ls write(stdout,„ahoj“) výpis adresáře je do stdout, tj. do souboru vypis.txt wait()

Použití standardních proudů standardní deskriptory jsou výhoda programátor se nemusí starat (zajišťuje rodič – shell) využíváno v příkazovém řádku → filtry v GUI skryto na stdout zapisují aplikace ladící informace na stderr zapisují aplikace chybová hlášení typicky však zahazováno chceme-li výstup vidět, spustíme program z přík. řádku Windows 7 → předávání objektů skrze rouru nutno přizpůsobit všechny dotčené programy

Kolona (roura) specifické využití standardních deskriptorů programA | programB stdout z programA jde na stdin programB datový proud je bez struktury (chápou ho programy) umožňuje řetězit jednoduché programy umožňuje postupné zpracování vstupních dat využívá koncept jednoúčelových nástrojů a filtrů filtr čte vstup, pozmění ho a zapíše na výstup nedostane-li parametr, používá 0, 1 a 2 téměř všechny unixové nástroje se chovají jako filtry např.: cat, grep, sort, less, awk, sed, …

Realizace kolony (roury) shell grep … | sort Funkce pipe() vytváří dva nové deskriptory, které jsou propojené (zápis do jednoho se objevuje v druhém). Kód je jen naznačen. fork() pipe(); fork() exec('grep'); exec('sort'); grep ... roura sort wait()

Filtr je program, respektující standardní proudy při spuštění bez parametrů: čte z deskriptoru 0 (tj. klávesnice) zapisuje na 1 (stdout) a 2 (stderr) parametry mohou zařídit interní přesměrování: ze souboru nebo do souboru filtr lze použít v koloně kolona propojuje výstup prvního se vstupem druhého filtr „filtruje“ (modifikuje) data → odtud název Příklad: cut -d: -f1 /etc/passwd | less grep ro /etc/passwd | sort

využití konceptu filtrů ve vlastním programu