PB071 Úvod do C, 28.4.2014 PB071 – Programování v jazyce C POSIX.

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ÁŘ
Perl Co je Perl a na co je dobrý Základní konstrukce jazyka
Přednáška 11 Jiří Šebesta
SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
M. Štulc, J. Šváb, J. Kolena SIMULACE OPERAČNÍHO SYSTÉMU
Práce se soubory. Ukládání dat Textové soubory s jednoduchou strukturou (např..txt a.csv) textové soubory s vnitřní hierarchií (např..xml) Soubory binárního.
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í.
C# pro začátečníky Mgr. Jaromír Osčádal
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
PHP – vkládání souborů a html 5
Programování v C++ Cvičení.
Protokol LDAP autor:Zdeněk Jonáš předmět:PSI un:A01144.
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.
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
Základy práce na PC Ing. Jan Roubíček.
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.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
PHP – Základy programování
Shell Team Jan Kupka Petr Kykal Tomáš Paríšek si Vám dovoluje představit
Dynamická alokace, polymorfismus
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.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
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.
Knihovna GLib ● Multiplatformní nástavba standardní C knihovny (běží na Windows, Linux, Mac,...) ● Naleznete zde nástroje pro komfortní práci s řetězci.
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.
INFSO-RI Enabling Grids for E-sciencE GENIUS/GILDA Tutorial, Zasílání a správa úloh pomocí příkazové řádky Lukáš Fiala.
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
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.
1/28 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Vlákna 06.
Vnořené SQL (embedded SQL) Dotazovací jazyky I
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
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.
Pythia8 Jiří Chudoba, na základě práce a prezentací Torbjerna Sjostranda.
C – cyklus do-while Mgr. Lenka Švancarová.
Úvod do UNIXu (6th round)
Operační systém GNU Linux Příkazy pro práci se soubory.
Úvod do UNIXu (6 th round) David Hoksza
Počítače a programování 2
PB071 – Principy nízkoúrovňového programování
Instalace Javy ( pro Windows )
Operační systémy 9. Spolupráce mezi procesy
Databázové systémy a SQL
PB071 – Principy nízkoúrovňového programování
C# přehled vlastností.
Přednášky z Distribuovaných systémů
Systém souborů 1.
Transkript prezentace:

PB071 Úvod do C, PB071 – Programování v jazyce C POSIX

PB071 Organizační Zápočtový příklad nanečisto ●v tomto týdnu na cvičeních, 60 minut ●(naostro proběhne , čtvrtkové odpadnuté cvičení 15.5.) ●Pro účast na zkoušce je nutné mít zapsán zápočet v poznámkovém bloku Posun předtermínu zkoušky ●Z na :00 ●Posunuto z důvodu svátečního odpadnutí dvou čtvrtků ●(Lidé ze čtvrtečních skupin by se nemohli zúčastnit) Dnes ●POSIX ●Zvaná přednáška – Juraj Michálek Úvod do C,

PB071 Úvod do C, POSIX

PB071 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 ● 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) Úvod do C,

PB071 POSIX - kompatibilita Unix/Linux ●dobrá dlouhodobá podpora, bez problémů ●každý certifikovaný UNIX splňovat ●jazyk C je součástí normy POSIX MS Windows ●omezená implementace funkcí ze standardu, jen některé distribuce... ●MS preferuje využívání svých funkcí – Win32 API... ●Cygwin, MinGW – implementace hlavní části POSIX normy pro Céčkové programy (pod Windows) Úvod do C,

PB071 Práce se soubory a adresáři #include 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é Úvod do C,

PB071 (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! Úvod do C,

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

PB071 Výpis obsahu adresáře Jak rozlišit podadresář od souboru? Jak zjistit další informace o souboru? (čas, práva) Jak projít zanořenou strukturu adresářů? Úvod do C, 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 }

PB071 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 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č?) Úvod do C, #define DT_UNKNOWN 0 #define DT_DIR 4 #define DT_REG 8 #define DT_LNK 10

PB071 Úvod do C, 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); else 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); } Převzato z

PB071 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 Úvod do C,

PB071 Úvod do C, #include 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 spuštění vlákna struktura pro kontrolu vlákna funkce pro vlákno argument pro funkci zpracování argumentu Převzato a upraveno z počkáme na dokončení vláken

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

PB071 Úvod do C, Zvaná přednáška – Juraj Michálek