fopen <STDIO.H>
Składnia: FILE *fopen(const char *NazwaPliku, const char *tryb);
gdzie:
NazwaPliku - nazwa otwieranego strumienia;
tryb - tryb dostępu i transmisji danych.

Opis
Otwiera nowy strumień. Jeżeli strumień został otwarty do aktualizacji (czytania i zapisywania), to należy przestrzegać poniższych zasad:

  • zapis nie może następować bezpośrednio po odczycie bez użycia funkcji fseek lub rewind;
  • odczyt nie może następować bezpośrednio po zapisie bez użycia funkcji fseek lub rewind.

Zwracana wartość:

  • powodzenie - wskaźnik do otwartego strumienia;
  • błąd - NULL.

Przykład:

/* Program tworzy kopię pliku AUTOEXEC.BAT
i zapisuje ją w pliku AUTOEXEC.BAK */

#include <stdio.h>
#include <string.h>

int main(void)
{  FILE *in, *out;
   char bufor[200];

   /* OTWIERANIE PLKÓW */
   // Jeżeli nie uda się otworzyć pliku, to komunikat i koniec
   if ((in = fopen("C:\\AUTOEXEC.BAT", "rt")) == NULL)
                // otwarcie w trybie tekstowym [t], tylko do odczytu [r]
   {  printf("Nie można otworzyć pliku wejściowego.\n");
      return 1;
   }

   // Jeżeli nie uda się otworzyć pliku, to komunikat i koniec
   if ((out = fopen("C:\\AUTOEXEC.BAK", "wt")) == NULL)
                // otwarcie w trybie tekstowym [t], do zapisu [w]
                // jeśli pliku nie ma, to będzie utworzony
                // jeśli jest, to jego zawartość zostanie skasowana
   {  printf("Nie można otworzyć pliku wyjściowego.\n");
      return 1;
   }

   while (!feof(in))            // dopóki nie ma końca pliku wejściowe
      { fgets(bufor,200,in);    // odczyt z pliku wejściowego
        fputs(bufor, out);      // zapis do pliku wyjściowego
      }

   fclose(in);                  // zamknięcie pliku wejściowego
   fclose(out);                 // zamknięcie pliku wyjściowego
   return 0;
}

freopen <STDIO.H>
Składnia: FILE *freopen(const char *NazwaPliku, const char *tryb, FILE *stream);
gdzie:
NazwaPliku - nazwa otwieranego strumienia;
tryb - tryb dostępu i transmisji danych.
stream - wskaźnik do otwartego strumienia, który zostanie zastąpiony wskaźnikiem do NazwaPliku.

Opis
Zamyka otwarty strumień i otwiera jednocześnie inny z tym samym wskaźnikiem. freopen jest użyteczne przy przekierowaniu strumieni standardowych: stdin, stdout i stderr. Jeżeli strumień został otwarty do aktualizacji (czytania i zapisywania), to należy przestrzegać poniższych zasad:

  • zapis nie może następować bezpośrednio po odczycie bez użycia funkcji fseek lub rewind;
  • odczyt nie może następować bezpośrednio po zapisie bez użycia funkcji fseek lub rewind.

Zwracana wartość:

  • powodzenie - argument stream;
  • błąd - NULL.

Przykład:

#include <stdio.h>

int main(void)
{ /* przekierowanie standardowego wyjścia do pliku */
  if (freopen("STDOUT.TXT", "w", stdout) == NULL)
      fprintf(stderr, "Błąd przekierowania stdout\n");

  printf("Ten komunikat powinien być zapisany do pliku.");

  fclose(stdout);
  return 0;
}

Tryby otwarcia:
Tryb Opis
r Plik otwierany tylko do czytania.
w Założenie pliku do zapisu. Jeżeli pliku nie ma, to zostanie założony. Jeżeli plik o podanej nazwie już istnieje, to jego dotychczasowa zawartość zostanie nadpisana.
a Tryb dopisywania. Otwiera istniejący plik na końcu do dopisywania lub tworzy nowy plik, jeżeli podany nie istnieje.
r+ Otwiera istniejący plik do aktualizacji (czytania i zapisywania).
w+ Tworzy nowy plik do aktualizacji (czytania i zapisywania). Jeżeli plik o podanej nazwie już istnieje, to jego dotychczasowa zawartość zostanie nadpisana.
a+ Otwiera plik na końcu do aktualizacji (czytania i zapisywania). Jeżeli pliku nie ma, to zostanie założony.

Tryby transmisji danych:
Tryb Opis
t ryb tekstowy z uwzględnieniem znaków końca wiersza i końca pliku.
b Tryb binarny: wszystkie znaki w pliku są danymi.