PB071 – Principy nízkoúrovňového programování

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Programování v C jazyku - SEMINÁŘ
Obecně o operačních systémech
Přednáška 11 Jiří Šebesta
PB071 Úvod do C, PB071 – Programování v jazyce C POSIX.
Jazyk C# a platforma .NET ZS 2013/2014
VISUAL BASIC Práce se soubory.
SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
M. Štulc, J. Šváb, J. Kolena SIMULACE OPERAČNÍHO SYSTÉMU
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programování v C++ Cvičení.
Operační systém Adam Greguš, 4.A.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
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
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Shell Team Jan Kupka Petr Kykal Tomáš Paríšek si Vám dovoluje představit
Operační systémy.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Úkol Vytvořit soubor – touch file Zpřístupnit ho ostatním studentům, ale ne mě (uživatel tupost) – lze to? Na čem to závisí? – závisí to na tom, zda jsou.
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í.
PB161 PB161 – Programování v jazyce C++ Objektově Orientované Programování Šablony, Návrhové principy a (anti-)vzory PB161 | Šablony, Návrhové principy.
Příklady v jazyku C – část 4
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
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.
OSNOVA: a) Úvod a klasifikace b) Funkce main() s argumenty c) Souborový vstup a výstup d) Programování WAV Jiří Šebesta Ústav radioelektroniky, FEKT VUT.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Instalace MS Dynamics NAV 5.0
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
SAMBA umožňuje linuxovému systému sdílení prostředků a služeb prostřednictvím sítě používá SMB (server message block) protocol - identický protokolu.
Operační systém GNU Linux Příkazy pro správu procesů.
Operační systém GNU Linux
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.
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
1/28 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Vlákna 06.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
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é.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – cyklus do-while Mgr. Lenka Švancarová.
Úvod do UNIXu (6th round)
Instalace MS Dynamics NAV 5.0 Stručný návod/Installation manual.
Operační systém GNU Linux Příkazy pro práci se soubory.
Úvod do UNIXu (6 th round) David Hoksza
Instalace MS Dynamics NAV 5.0 Stručný návod/Installation manual.
Kontakty slajdy: ftp://ulita.ms.mff.cuni.cz/predn/POS.
CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Jazyk C# a platforma.NET ZS 2015/2016 Pavel Ježek
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Počítače a programování 2
Instalace Javy ( pro Windows )
Operační systémy 9. Spolupráce mezi procesy
Databázové systémy a SQL
TaHoma 2.0 – Connected Living
Úvod do jazyka C Algoritmizácia úloh.
PB071 – Principy nízkoúrovňového programování
C# přehled vlastností.
Instalace MS Dynamics NAV 5.0
Přednášky z Distribuovaných systémů
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Systém souborů 1.
Transkript prezentace:

PB071 – Principy nízkoúrovňového programování POSIX PB071 24.4.2017

Organizační Příští a přespříští týden přednášky odpadají (svátky) Přednášky v týdnu od 8.5. bude ze záznamu (Makra, bezpečnost) Zvaná přednáška 15.5. – Juraj Michálek Zápočtový příklad nanečisto (týden od 1.5.) Obdobné podmínky jako naostro, ale je na „vyzkoušení“ Zápočtový příklad naostro (týden od 15.5.) na vašem cvičení, obdobně jako při nácviku každé cvičení bude mít jiný příklad je nutné úspěšně vypracovat (není bodováno) Zkouška vypsáno v ISu, u počítačů v B130 /B116/B117/B310/A21x musíte znát své heslo na Aisu! (u Linuxových strojů) nutno mít zapsáno v poznámkovém bloku ZAPOČTENO (uhánějte svého cvičícího) Náplň zkoušky (50 minut) 40 bodů otázky z průběžných testíků (dostupné i jako drill) 40 bodů porozumění stávajícímu kódu (co vypíše program...) PB071 24.4.2017

POSIX PB071 24.4.2017

POSIX C library Snaha o vytvoření jednotného okolního prostředí (API) umožňující přenositelnost programů vyžadujících interakci s OS http://en.wikipedia.org/wiki/C_POSIX_library Knihovna funkcí pro interakci s OS, pokrývá širokou oblast kontrola procesů (spouštění, komunikace, ukončení) práce se vstupními a výstupními zařízeními (pipes...) práce s vlákny, synchronizační mechanismy (mutex) spouštění příkazů shellu ... Historie POSIX.1 (1998) POSIX:2008 (aktuální norma) PB071 24.4.2017

POSIX - kompatibilita Unix/Linux MS Windows Velká změna (2016/2017) dobrá dlouhodobá podpora, bez problémů každý certifikovaný UNIX musí splňovat jazyk C je součástí normy POSIX MS Windows omezená implementace funkcí ze standardu, jen některé distribuce... (ale brzy bude změna) MS preferuje využívání svých funkcí – Win32 API... Cygwin, MinGW – implementace hlavní části POSIX normy pro Céčkové programy (pod Windows) Velká změna (2016/2017) Windows 10 integruje BASH shell (Ubuntu) PB071 24.4.2017

Práce se soubory a adresáři #include <dirent.h> Popisovač souborů (file descriptor) index do tabulky souborů v jádře OS (handle) DIR *opendir(const char *dirname); struct dirent *readdir(DIR *dirp); int closedir(DIR *dirp); Pozor, funkce mohou být stavové PB071 24.4.2017

(Ne)stavovost funkcí Jak vrátit jména pro 1001 souborů v adresáři? Jediným funkčním zavoláním? je nutné naformátovat jména do jediného řetězce Co použít jako oddělovač? speciální znak – nepraktické, který zvolit? koncová nula? Používá se, jak byste udělali? Zavedení stavové funkce každé zavolání vrátí další soubor např. readdir() vrátí po každém zavolání další soubor v adresáři stav musí být uchováván (OS) a uvolněn! PB071 24.4.2017

Zjištění obsahu adresáře Otevření adresáře (funkce opendir) vytvoří stavovou strukturu u OS (DIR) připojenou na daný adresář Postupné procházení adresáře (funkce readdir) každé zavolání vrátí další soubor v adresáři formou struktury (struct dirent) Práce s nalezeným souborem (struct dirent) dirent.d_name např. pomocí C funkce fopen() Ukončení práce s adresářem (funkce closedir) uvolní stavovou strukturu u OS PB071 24.4.2017

Výpis obsahu adresáře Jak rozlišit podadresář od souboru? void PosixPrintFiles(const char* path) { DIR *dir = NULL; if ((dir = opendir(path))) { // connect to directory struct dirent *dirEntry = NULL; while ((dirEntry = readdir(dir)) != NULL) {// obtain next item printf("File %s\n", dirEntry->d_name); // get name } closedir(dir); // finish work with directory Jak rozlišit podadresář od souboru? Jak zjistit další informace o souboru? (čas, práva) Jak projít zanořenou strukturu adresářů? PB071 24.4.2017

Rozlišení adresáře od souboru Problém v rozdílné podpoře v Unixu / Windows Linux: struct dirent.d_type 4, 10 adresář, 8 soubor makro S_ISDIR, funkce stat nebo lstat <sys/stat.h> Windows: omezená podpora, dirent.d_type nemusí být dostupný např. není defaultně v MinGW zkusit otevřít položku pomocí opendir() pokud se nepodaří, nemusí být adresář (proč?) #define DT_UNKNOWN 0 #define DT_DIR 4 #define DT_REG 8 #define DT_LNK 10 PB071 24.4.2017

Převzato z http://pubs. opengroup struct dirent *dp; struct stat statbuf; struct passwd *pwd; struct group *grp; struct tm *tm; char datestring[256]; ... // Open directory opendir etc. /* Loop through directory entries. */ while ((dp = readdir(dir)) != NULL) { /* Get entry's information. */ if (stat(dp->d_name, &statbuf) == -1) continue; /* Print out type, permissions, and number of links. */ printf("%10.10s", sperm (statbuf.st_mode)); printf("%4d", statbuf.st_nlink); /* Print out owner's name if it is found using getpwuid(). */ if ((pwd = getpwuid(statbuf.st_uid)) != NULL) printf(" %-8.8s", pwd->pw_name); else printf(" %-8d", statbuf.st_uid); /* Print out group name if it is found using getgrgid(). */ if ((grp = getgrgid(statbuf.st_gid)) != NULL) printf(" %-8.8s", grp->gr_name); printf(" %-8d", statbuf.st_gid); /* Print size of file. */ printf(" %9jd", (intmax_t)statbuf.st_size); tm = localtime(&statbuf.st_mtime); /* Get localized date string. */ strftime(datestring, sizeof(datestring), nl_langinfo(D_T_FMT), tm); printf(" %s %s\n", datestring, dp->d_name); } PB071 24.4.2017

Vlákna v POSIXu Vlákna umožňují spustit několik úkolů paralelně při jednom jádře CPU se střídají při více jádrech CPU mohou běžet paralelně Pracovní vlákno (Worker thread) funkce obsahující kód pro vykonání data předaná při spuštění funkci jako argument spuštění potřebného počtu vláken Použití vláken může vyžadovat synchronizaci ochrana před nevhodným souběžným použitím zdrojů zápis do paměti, přístup k souboru... https://computing.llnl.gov/tutorials/pthreads/ http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html PB071 24.4.2017

struktura pro kontrolu vlákna počkáme na dokončení vláken #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s \n", message); } int main() { pthread_t thread1, thread2; char *message1 = "Thread 1"; char *message2 = "Thread 2"; int iret1, iret2; /* Create independent threads each of which will execute function */ iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); /* Wait till threads are complete before main continues. Unless we */ /* wait we run the risk of executing an exit which will terminate */ /* the process and all threads before the threads have completed. */ pthread_join( thread1, NULL); pthread_join( thread2, NULL); printf("Thread 1 returns: %d\n",iret1); printf("Thread 2 returns: %d\n",iret2); return 0; funkce pro vlákno zpracování argumentu spuštění vlákna funkce pro vlákno struktura pro kontrolu vlákna počkáme na dokončení vláken argument pro funkci Převzato a upraveno z http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html PB071 24.4.2017

Další funkce POSIXu Naleznete v přednášce “Návaznost jazyka C na OS” (Šimon Tóth), web předmětu http://cecko.eu/_media/public/prednaska_posix_2012.pdf PB071 24.4.2017