Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       fopen, fdopen, freopen - funkcje otwarcia strumienia

SKŁADNIA

       #include <stdio.h>

       FILE *fopen(const char *path, const char *mode);
       FILE *fdopen(int fildes, const char *mode);
       FILE *freopen(const char *path, const char *mode, FILE *stream);

OPIS

       Funkcja  fopen  otwiera plik, którego nazwę wskazuje path i wiąże z nim
       strumień.

       Argument  mode  wskazuje  na  łańcuch  rozpoczynający  się   jednym   z
       poniższych ciągów (mogą po nich występować dodatkowe znaki):

       r      Otwarcie pliku tekstowego do odczytu. Strumień wskazuje początek
              pliku.

       r+     Otwarcie pliku do odczytu i zapisu. Strumień  wskazuje  początek
              pliku.

       w      Usunięcie   zawartości   pliku   lub   utworzenie  nowego  pliku
              tekstowego do zapisu.  Strumień wskazuje początek pliku.

       w+     Otwarcie do odczytu i zapisu. Jeśli plik nie  istnieje,  zostaje
              utworzony, w przeciwnym wypadku jego zawartość zostaje usunięta.
              Strumień wskazuje początek pliku.

       a      Otwarcie do dopisywania (zapisu na końcu pliku). Jeśli plik  nie
              istnieje,  zostaje utworzony. Strumień wskazuje na koniec pliku.

       a+     Otwarcie do odczytu i dopisywania (zapisu na końcu pliku). Jeśli
              plik  nie  istnieje,  zostaje  utworzony.  Strumień  wskazuje na
              koniec pliku.

       Łańcuch mode może także zawierać literę ``b'' zarówno jak ostatni  znak
       jak  też  jako  znak umeszczony pomiędzy znakami dowolnego dwuznakowego
       łańcucha opisanego  powyżej.   Służy  to  wyłącznie  zgodności  z  ANSI
       X3.159-1989  (``ANSI  C'')  i  nie  powoduje żadnego efektu, ``b'' jest
       ignorowane we wszystkich systemach zgodnych z POSIX, włączając Linuksa.
       (Inne  systemy  mogą  różnie  traktować pliki tekstowe i pliki binarne.
       Dodanie ``b'' może być dobrym pomysłem, jeśli  wykonywane  są  operacje
       I/O  dla  pliku binarnego a przewidywane jest przeniesienie programu do
       środowisk nieuniksowych.)

       Wszystkie      pliki      będą      tworzone      z       uprawnieniami
       S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH (0666), zmodyfikowanymi
       przez wartość umask procesu (patrz umask(2)).

       Odczyt i  zapis  może  występować  w  strumieniu  do  zapisu/odczytu  w
       dowolnej  kolejności.  Należy  zauważyć,  że  ANSI C wymaga interwencji
       funkcji ustalającej pozycję pliku pomiędzy zapisem i odczytem, chyba że
       operacja  odczytu  napotka  koniec  pliku.  (Jeśli ten warunek nie jest
       spełniony, operacja  odczytu  może  zwrócić  wynik  innego  zapisu  niż
       ostatni.)   Tak  więc  dobrą  zasadą (i czasami konieczną pod Linuksem)
       jest wstawianie funkcji fseek lub fgetpos pomiędzy operacjami zapisu  i
       odczytu  na  takim  strumieniu.  Ta operacja może być pozornym rozkazem
       pustym, no-op, (tak jak w fseek(..., 0L, SEEK_CUR) wywoływanym  w  celu
       wykorzystania ubocznych skutków synchronizujących.

       Otwarcie  pliku  w  trybie  dopisywania  (a  jako  pierwszy  znak mode)
       powoduje, że wszystkie późniejsze operacje zapisu  do  tego  strumienia
       wystąpią na końcu pliku, tak jakby były poprzedzone wywołaniem
              fseek(stream,0,SEEK_END);

       Funkcja fdopen wiąże strumień z istniejącym deskryptorem pliku, fildes.
       Łańcuch mode strumienia (jeden z "r", "r+", "w", "w+", "a", "a+")  musi
       być  zgodny  z  trybem  otwarcia  deskryptora  pliku.   Pozycja  nowego
       strumienia jest taka sama, jak pozycja deskryptora fildes, a  znaczniki
       błędu  i  końca  pliku  są  wyłączane. Tryby "w" oraz "w+" nie powodują
       usunięcia zawartości pliku.  Deskryptor  pliku  nie  jest  powielany  i
       zozstanie  zamknięty  w  chwili  zamknięcia  strumienia  utworzonego za
       pomocą fdopen.  Rezultat wywołania funkcji fdopen dla  obiektu  pamięci
       dzielonej jest niezdefiniowany.

       Funkcja  freopen  otwiera  plik,  którego nazwa jest zawarta w łańcuchu
       wskazywanym przez path i wiąże z nim strumień wskazywany przez  stream.
       Pierwotny  strumień  jest  zamykany  (jeśli istnieje). Argument mode ma
       takie  samo  znaczenie  jak  w  przypadku   funkcji   fopen.    Głównym
       zastosowaniem   funkcji   freopen  jest  zamiana  pliku  związanego  ze
       standardowym strumieniem tekstowym (stderr, stdin lub stdout).

WARTOŚĆ ZWRACANA

       Jeśli funkcja fopen, fdopen czy freopen zakończy się pomyślnie,  zwraca
       wskaźnik  do  struktury  FILE.   W  przeciwnym  wypadku  zwraca  NULL a
       zmiennej globalnej  errno  nadawana  jest  wartość  określającą  rodzaj
       błędu.

BŁĘDY

       EINVAL Argument  mode  podany  dla  fopen,  fdopen,  lub  freopen  jest
              nieprawidłowy.

       Funkcje fopen, fdopen i freopen mogą także zakończyć się niepowodzeniem
       i  ustawić  wartość  errno  na dowolny błąd wymieniony w opisie funkcji
       malloc(3).

       Funkcja fopen może także zakończyć się niepowodzeniem i ustawić wartość
       errno na dowolny błąd wymieniony w opisie funkcji open(2).

       Funkcja  fdopen  może  także  zakończyć  się  niepowodzeniem  i ustawić
       wartość errno na dowolny błąd wymieniony w opisie funkcji open(2).

       Funkcja freopen może  także  zakończyć  się  niepowodzeniem  i  ustawić
       wartość  errno  na  dowolny  błąd  wymieniony w opisie funkcji open(2),
       fclose(3) i fflush(3).

ZGODNE Z

       Funkcje fopen oraz freopen są zgodne z ANSI X3.159-1989  (``ANSI  C'').
       Funkcja fdopen jest zgodna z IEEE Std1003.1-1988 (``POSIX.1'').

ZOBACZ TAKŻE

       open(2), fclose(3), fileno(3)