Provided by:
manpages-pl-dev_20060617-1_all 
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)