IB001 – Seminární skupiny 6, 7 a 24

Týden 12

Proudy

Obecně, pokud se v jazyce C pracuje s jakýmkoliv vstupem nebo výstupem, je tento vstup nebo výstup reprezentován jako proud. V C jsou některé vstupní proudy předdefinovány a jsou otevřeny při startu programu, abychom mohli v programu komunikovat s okolím (např. uživatel). Jsou to proudy:

  • stdin - standardní vstup
  • stdout - standardní výstup
  • stderr - standardní chybový výstup (zapisují se chybová hlášení)

Definice těchto proudů se nacházejí v hlavičkovém souboru stdio.h a jsou implicitně užívány funkcemi, které jsme doposud používali k výstupu a vstupu na/z obrazovku/y. Standardní proudy mají typ ukazatele na strukturu FILE, lze je tedy užívat ve všech vstupně/výstupních funkcích, které mají cílový proud jako svůj argument - např. fgets.

Práce se soubory

Se soubory (proudy) lze pracovat ve dvou módech:

  • binární proud - data se neinterpretují (jsou to byty)
  • textový proud - data se interpretují jako text (znaky konce řádků a jiné)

Před čtením nebo zápisem do souboru je nutné otevřít správně nastavený proud pomocí funkce fopen. Po úspěšném otevření proudu - je třeba zkontrolovat návratovou hodnotu, můžeme pro čtení nebo zápis používat knihovní funkce ze souboru stdio.h - zpravidla začínají písmenem f... Nakonec je potřeba proud zavřít pomocí funkce fclose.
Výpis do textového souboru by mohl vypadat takto:

#include <stdio.h>

int main(void)
{
    // otevri soubor a zkontroluj, zda se povedlo
    FILE * out = fopen("output.txt", "w");
    if (out == NULL)
    {
        printf("Otevreni souboru output.txt pro zapis se nezdarilo");
        // program skoncil s chybou - kvuli souboru
        return 1;
    }
    // vypis do souboru Hello, World! a zavri jej
    fputs("Hello, World!", out);
    fclose(out);
    // program skoncil bez chyby
    return 0;
}