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

Slides:



Advertisements
Podobné prezentace
Přednáška 11 Jiří Šebesta
Advertisements

PB071 Úvod do C, PB071 – Programování v jazyce C POSIX.
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í.
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í.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
2.1 Pevný disk Fyzická struktura  plotny  záznamový materiál  č/z hlavičky  prachotěsný obal  motorky otáčení ploten  plotny na jedné hřídely.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Kateřina Raichová. Materiál je publikován pod licencí Creative Commons. ze sady:3tematický.
Elektronické učební materiály - II. stupeň Digitální technologie 9 Autor: Bc. Pavel Šiktanc Movie Maker uložení a sdílení filmů Co se všechno naučíme???
OPERAČNÍ SYSTÉMY Část 3 – správa procesů Zpracovala: Mgr. Marcela Cvrkalová Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97.
Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Prostředí internetu Číslo DUM: III/2/VT/2/2/27 Vzdělávací předmět: Výpočetní technika Tematická oblast:
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Josef Ledvoň. Dostupné z Metodického portálu ISSN: , financovaného.
ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170 Číslo projektu
Anotace Materiál je určen pro 2. ročník studijního oboru Provoz a ekonomika dopravy, předmětu Manipulace s materiálem, inovuje výuku použitím multimediálních.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
OPERAČNÍ SYSTÉMY Část 5 – souborové systémy
UNIX 6. Soubory a adresáře
Základy automatického řízení 1
Počítačová bezpečnost Cvičení 2: Procesy a oprávnění
PB071 – Principy nízkoúrovňového programování
Základní pojmy pro práci s OS Windows
Plánování ve školní tělesné výchově
Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Internetové služby – Disk Google Číslo DUM: III/2/VT/2/2/36 Vzdělávací předmět: Výpočetní technika Tematická.
COM – Práce s objektovým modelem jiné aplikace
Práce s PC P1.B Vránek Michal.
Inf Počítač a lidé s handicapem
Operační systémy Soubory a adresáře
Veřejná správa, Regionální rozvoj Litoměřice Jan Jůna 2012
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: ,
OPERAČNÍ SYSTÉMY Část 1 – úloha OS Zpracovala: Mgr. Marcela Cvrkalová
Inf Operační systémy a jejich funkce
Správce virtuálních strojů
Greenstone Librarian Interface
Gymnázium, Brno, Elgartova 3
UNIX 7. Soubory a proudy © Milan Keršláger
UNIX 6. Soubory a adresáře
Kurz algoritmizace a programování v jazyce C
Struktury.
Windows – WordPad VY_32_INOVACE_32_649
Zkušenosti s nasazením J2EE aplikací na AS GlassFish
Jednotné principy klasifikace na GJKT
Systém jednotné autentizace - SJA
Zájmena Autor: Mgr. Ivana Tesařová
Databáze MS ACCESS 2010.
Překladače 4. Lexikální analýza
DIGITÁLNÍ UČEBNÍ MATERIÁL
Financováno z ESF a státního rozpočtu ČR.
Souběh 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: 
Lexikální atomy jazyka C
C# Vícevláknové aplikace
Operační systém GNU Linux
1. ročník oboru Mechanik opravář motorových vozidel
UNIX 7. Deskriptory a proudy
Překladače Zápis programu
PRESENT SIMPLE TENSE Autor: Mgr. Ivana Tesařová
Instalace OS Linux 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: 
MU002 Informatika II Základy algoritmizace 1/13
Digitální gramotnost Informatické myšlení
Remote login.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
název projektu: Šablony Špičák číslo projektu: CZ.1.07/1.4.00/
Přednášky z Distribuovaných systémů
Základní druhy zeleniny VY_52_INOVACE_34
Přednáška 10 Uložené procedury.
Jaroslav Kudr pro OATGM
ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170
Zdravá svačina VY_52_INOVACE_27
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Digitální učební materiál
Transkript prezentace:

PB071 – Principy nízkoúrovňového programování POSIX, CMAKE PB071 17.4.2018

POSIX PB071 17.4.2018

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 17.4.2018

POSIX - kompatibilita Unix/Linux MS Windows 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 pro MS Windows (2016/2017) Windows 10 integruje BASH shell (Ubuntu) PB071 17.4.2018

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 17.4.2018

(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 17.4.2018

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 17.4.2018

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 17.4.2018

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 17.4.2018

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 17.4.2018

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 17.4.2018

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 17.4.2018

Make, CMake Naleznete v přednášce “Překladové systémy” (Jirka Slabý), web předmětu PB071 17.4.2018

Další funkce POSIXu Naleznete v přednášce “Návaznost jazyka C na OS” (Šimon Tóth), web předmětu PB071 17.4.2018

PB071 17.4.2018