Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Vstupní a výstupní operace (1)

Podobné prezentace


Prezentace na téma: "Vstupní a výstupní operace (1)"— Transkript prezentace:

1 Vstupní a výstupní operace (1)
Jazyk C poskytuje sadu V/V (vstupních/vý-stupních) operací, které jsou založeny na koncepci tzv. proudů (stream) Proudem může být soubor nebo jiný zdroj, resp. příjemce dat (včetně terminálu nebo jiného fyzického zařízení) Informace o proudu jsou ukládány v dato-vém typu FILE (struktura definovaná v hla-vičkovém souboru stdio.h) 08/05/2018

2 Vstupní a výstupní operace (2)
Mezi informacemi, které jsou ukládány ve struktuře FILE, je např.: současná pozice v rámci proudu (tzv. indikátor pozice): určuje, od jakého místa bude prováděn zápis, resp. od jakého místa bude prováděno čtení každá operace čtení (zápisu) provede posunutí indiká-toru pozice za poslední načtený (zapsaný) znak (byte) ukazatel na připojené vyrovnávací paměti indikátor chyby indikátor konce souboru 08/05/2018

3 Vstupní a výstupní operace (3)
Existují dva formáty proudů: textový: posloupnost znaků, která je rozdělena do řádků (pro-měnlivé délky) každý řádek se skládá z žádného, jednoho nebo více znaků následovaných znakem nový řádek ’\n’ binární: posloupnost hodnot typu char (hodnoty typu char jsou celá čísla a zaujímají v operační paměti 1 B) libovolná data v jazyku C se mohou převést na pole hodnot typu char (na posloupnost bytů) může transparentně zaznamenat interní data 08/05/2018

4 Vstupní a výstupní operace (4)
Jakmile dojde ke spuštění programu v jazy-ku C, automaticky se pro něj otevírají tři předdefinované proudy: stdin: standardní vstup obvykle je pro něj použita klávesnice počítače stdout: standardní výstup většinou reprezentuje obrazovku monitoru stderr: standardní výstup pro chybová hlášení obvykle spojen s obrazovkou monitoru 08/05/2018

5 Práce se soubory (1) Programy v jazyku C mohou (prostřednict-vím proudů) přistupovat k datům uloženým v souborech, které se nacházejí na externích paměťových médiích (FD, HDD, CD, DVD, BD, tape apod.) Data ze souborů mohou být načítána do ope-rační paměti, kde je provedeno jejich zpraco-vání, a rovněž mohou být z operační paměti do souborů zapisována 08/05/2018

6 Práce se soubory (2) Pro práci se soubory je zapotřebí v programu definovat proměnnou jako ukazatel na hod-notu typu FILE Přiklad: FILE *soubor; definuje proměnnou soubor, která může následně sloužit pro práci se souborem uloženým na externím paměťovém médiu Se soubory (proudy) lze pracovat pomocí knihovních funkcí 08/05/2018

7 Práce se soubory (3) Funkce fopen: deklarována v: stdio.h
prototyp: FILE *fopen(const char *fname, const char *mode); funkce: otevírá (popř. vytváří) soubor se jménem fname v re-žimu mode otevřený (vytvořený) soubor je pak spojen s proudem parametr mode může nabývat hodnoty: ”r” – otevírá soubor pro čtení (soubor musí existovat) ”w” – vytváří nový (prázdný) soubor pro zápis – jestliže soubor již existuje, pak je přepsán soubo- rem novým 08/05/2018

8 Práce se soubory (4) ”a” – otevírá existující soubor pro přidání dat na jeho konec – jestliže soubor neexistuje, pak je vytvořen nový (prázdný) soubor, na jehož konec je možné zapisovat ”r+” – otevírá soubor pro čtení i zápis (soubor musí existo- vat) ”w+” – vytváří nový (prázdný) soubor pro čtení i zápis – jestliže soubor již existuje, pak je přepsán souborem novým ”a+” – otevírá existující soubor pro čtení a přidání dat na jeho konec – jestliže soubor neexistuje, pak je vytvořen nový (prázdný) soubor, z nějž je možné číst a na jehož konec je možné zapisovat na konci parametru mode (popř. před znakem +) může být ještě znak b, který způsobí, že se souborem se bude pracovat jako se souborem binárním (nikoliv textovým) 08/05/2018

9 Práce se soubory (5) mode r w a r+ w+ a+
Jmenovaný soubor již musí existovat ano ne ne ano ne ne Obsah existujícího souboru se ztrácí ne ano ne ne ano ne Čtení ze souboru povoleno ano ne ne ano ano ano Zápis do souboru povolen ne ano ano ano ano ano Zápis povolen pouze na konci souboru ne ne ano ne ne ano 08/05/2018

10 Práce se soubory (6) vrácená hodnota: poznámka:
v případě, že se soubor podaří otevřít (vytvořit), pak fun-kce vrací ukazatel typu FILE *, který určuje proud pro další vstupní nebo výstupní operace jestliže se soubor nepodaří otevřít (nastane chyba): vrací NULL kód chyby uloží do proměnné errno poznámka: je-li soubor otevřen pro čtení i zápis, pak by mezi vstup-ní operací následovanou výstupní operací (nebo výstupní operací následovanou vstupní operací) mělo být prove-deno vyprázdnění vyrovnávacích pamětí (fflush) vyprázdnění vyrovnávacích pamětí provádějí i funkce manipulující s indikátorem pozice (fseek, rewind) 08/05/2018

11 Práce se soubory (7) Funkce fclose: deklarována v: stdio.h
prototyp: int fclose(FILE *stream); funkce: uzavírá otevřený soubor spojený s proudem stream vyprazdňuje vyrovnávací paměti vrácená hodnota: 0 při úspěšném uzavření EOF při vzniku chyby 08/05/2018

12 Práce se soubory (8) Funkce fflush: deklarována v: stdio.h
prototyp: int fflush(FILE *stream); funkce: vyprazdňuje vyrovnávací paměti spojené s proudem stream proud zůstává otevřený vrácená hodnota: 0 při úspěšném provedení EOF při vzniku chyby 08/05/2018

13 Práce se soubory (9) Funkce fseek: deklarována v: stdio.h
prototyp: int fseek(FILE *stream, long int offset, int wherefrom); funkce: nastavuje indikátor pozice v souboru spojeném s prou-dem stream podle hodnoty specifikované paramet-rem offset parametr offset (číslo se znaménkem) určuje počet znaků (bytů) 08/05/2018

14 Práce se soubory (10) vrácená hodnota: poznámka:
parametr wherefrom označuje místo v souboru, od kterého se má měřit offset wherefrom může mít hodnotu: SEEK_SET offset je měřen od začátku souboru SEEK_CUR offset je měřen od aktuální pozice SEEK_END offset je měřen od konce souboru vrácená hodnota: 0 při úspěšné změně pozice různá od nuly při vzniku chyby poznámka: používána zejména u binárních souborů pro textové soubory by hodnota offset měla být buď nula, nebo hodnota vrácená funkcí ftell 08/05/2018

15 Práce se soubory (11) Funkce ftell: deklarována v: stdio.h
prototyp: long int ftell(FILE *stream); funkce: zjišťuje aktuální pozici (hodnotu indikátoru pozice) v souboru spojeném s proudem stream vrácená hodnota: aktuální hodnota indikátoru pozice souboru u binárních souborů odpovídá počtu znaků (bytů), které jsou v souboru před současnou pozicí v případě chyby vrací hodnotu –1 a nastaví proměnnou errno na hodnotu vyjadřující chybu 08/05/2018

16 Práce se soubory (12) Funkce rewind: deklarována v: stdio.h
prototyp: void rewind(FILE *stream); funkce: nastavuje indikátor pozice na začátek souboru spojeného s parametrem stream shodné s fseek(stream,0,SEEK_SET); vrácená hodnota: funkce nevrací žádnou hodnotu 08/05/2018

17 Práce se soubory (13) Funkce fgetc: deklarována v: stdio.h
prototyp: int fgetc(FILE *stream); funkce: čte jeden znak ze souboru spojeného s proudem stream posunuje indikátor pozice o jeden znak (indikátor pozice bude ukazovat na následující znak) vrácená hodnota: načtený znak jako hodnota typu int nastane-li chyba, nebo je-li proud na konci souboru, pak vrací hodnotu EOF 08/05/2018

18 Práce se soubory (14) Funkce fputc: Poznámka: deklarována v: stdio.h
prototyp: int fputc(int c, FILE *stream); funkce: zapisuje znak c (specifikovaný jako hodnota typu int) do souboru spojeného s proudem stream posunuje indikátor pozice za zapsaný znak vrácená hodnota: zapsaný znak nastane-li chyba, pak vrací hodnotu EOF Poznámka: pro načtení řetězce ze souboru je možné použít funkci fgets (viz řetězce) 08/05/2018

19 Práce se soubory (15) Funkce fputs: deklarována v: stdio.h
prototyp: int fputs(const char *s, FILE *stream); funkce: zapisuje znaky řetězce s (kromě ukončovacího znaku ’\0’) do souboru spojeného s proudem stream posunuje indikátor pozice za poslední zapsaný znak vrácená hodnota: v případě úspěšného zápisu vrací nezápornou hodnotu nastane-li chyba, pak vrací hodnotu EOF 08/05/2018

20 Práce se soubory (16) Funkce fscanf: deklarována v: stdio.h
prototyp: int fscanf(FILE *stream, const char *format,…); funkce: pracuje podobně jako funkce scanf pro parametr format platí stejná pravidla jako u fun-kce scanf znaky nejsou načítány ze standardního vstupu, ale ze souboru spojeného s proudem stream posunuje indikátor pozice za poslední načtený znak 08/05/2018

21 Práce se soubory (17) Funkce fprintf: deklarována v: stdio.h
prototyp: int fprintf(FILE *stream, const char *format,…); funkce: pracuje podobně jako funkce printf pro parametr format platí stejná pravidla jako u fun-kce printf posloupnost dat specifikovaná parametrem format není vypisována na standardní výstup, ale je ukládána do souboru spojeného s proudem stream posunuje indikátor pozice za poslední zapsaný znak 08/05/2018

22 Práce se soubory (18) Funkce fread: deklarována v: stdio.h
prototyp: size_t fread(void *ptr, size_t element_size, size_t count, FILE *stream); funkce: provádí načítání hodnot z binárního souboru spojeného s proudem stream ptr je ukazatel na pole obsahující count prvků, které budou načítány a z nichž každý má velikost element_size posunuje indikátor pozice za poslední načtený byte 08/05/2018

23 Práce se soubory (19) Funkce fwrite: vrácená hodnota:
skutečný počet načtených prvků: může být menší než count, dosáhne-li se konce souboru v případě chyby vrací hodnotu nula Funkce fwrite: deklarována v: stdio.h prototyp: size_t fwrite(void *ptr, size_t element_size, size_t count, FILE *stream); 08/05/2018

24 Práce se soubory (20) funkce: vrácená hodnota:
zapisuje hodnoty do binárního souboru spojeného s proudem stream ptr je ukazatel na pole obsahující count prvků, které budou zapisovány a z nichž každý má velikost element_size posunuje indikátor pozice za poslední zapsaný znak vrácená hodnota: skutečný počet zapsaných prvků jestliže vrácená hodnota je různá od hodnoty count, pak při zápisu nastala chyba 08/05/2018

25 Práce se soubory (21) Funkce feof: deklarována v: stdio.h
prototyp: int feof(FILE *stream); funkce: testuje, zda-li při čtení ze souboru spojeného s proudem stream bylo dosaženo jeho konce vrácená hodnota: 0 jestliže nebylo dosaženo konce souboru různá od nuly jestliže bylo dosaženo konce souboru 08/05/2018

26 Práce se soubory (22) Funkce ferror: deklarována v: stdio.h
prototyp: int ferror(FILE *stream); funkce: testuje, zda-li při práci se souborem spojeným s prou-dem stream nedošlo k chybě vrácená hodnota: 0 v případě, že žádná chyba nenastala různá od nuly jestliže při práci se souborem došlo k chybě 08/05/2018

27 Práce se soubory (23) Funkce clearerr: deklarována v: stdio.h
prototyp: void clearerr(FILE *stream); funkce: resetuje indikátor chyby a konce souboru spojeného s proudem stream následující volání funkce ferror nebude hlásit žádnou chybu vrácená hodnota: funkce nevrací žádnou hodnotu 08/05/2018

28 Práce se soubory (24) Funkce remove: deklarována v: stdio.h
prototyp: int remove(const char *filename); funkce: odstraní (zruší) soubor specifikovaný parametrem filename vrácená hodnota: 0 jestliže operace proběhla úspěšně různá od nuly při vzniku chyby 08/05/2018

29 Práce se soubory (25) Funkce rename: deklarována v: stdio.h
prototyp: int rename(const char *oldname, const char *newname); funkce: změní jméno souboru oldname na newname vrácená hodnota: 0 jestliže operace proběhla úspěšně různá od nuly při vzniku chyby 08/05/2018


Stáhnout ppt "Vstupní a výstupní operace (1)"

Podobné prezentace


Reklamy Google