fopen

Autres langues

Langue: pl

Autres versions - même langue

Version: 2002-01-03 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

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)