.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright (c) 1990, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" Chris Torek and the American National Standards Committee X3,
.\" on Information Processing Systems.
.\"
.\" SPDX-License-Identifier: BSD-4-Clause-UC
.\"
.\"     @(#)fopen.3	6.8 (Berkeley) 6/29/91
.\"
.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
.\" Modified, aeb, 960421, 970806
.\" Modified, joey, aeb, 2002-01-03
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH fopen 3 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
fopen, fdopen, freopen \- funkcje otwarcia strumienia
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <stdio.h>\fP
.PP
\fBFILE *fopen(const char *restrict \fP\fIpathname\fP\fB, const char *restrict \fP\fImode\fP\fB);\fP
\fBFILE *fdopen(int \fP\fIfd\fP\fB, const char *\fP\fImode\fP\fB);\fP
\fBFILE *freopen(const char *restrict \fP\fIpathname\fP\fB, const char *restrict \fP\fImode\fP\fB,\fP
\fB              FILE *restrict \fP\fIstream\fP\fB);\fP
.fi
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\fBfdopen\fP():
.nf
    _POSIX_C_SOURCE
.fi
.SH OPIS
Funkcja \fBfopen\fP() otwiera plik, którego nazwę wskazuje \fIpathname\fP i wiąże
z nim strumień.
.PP
Argument \fImode\fP wskazuje na łańcuch rozpoczynający się jednym z poniższych
ciągów (mogą po nich występować dodatkowe znaki, zgodnie z opisem poniżej):
.TP 
\fBr\fP
Otwarcie pliku tekstowego do odczytu. Strumień wskazuje początek pliku.
.TP 
\fBr+\fP
Otwarcie pliku do odczytu i zapisu. Strumień wskazuje początek pliku.
.TP 
\fBw\fP
Usunięcie zawartości pliku lub utworzenie nowego pliku tekstowego do
zapisu. Strumień wskazuje początek pliku.
.TP 
\fBw+\fP
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.
.TP 
\fBa\fP
Otwarcie do dopisywania (zapisu na końcu pliku). Jeśli plik nie istnieje,
zostaje utworzony. Strumień wskazuje na koniec pliku.
.TP 
\fBa+\fP
Otwarcie do dopisywania (zapisu na końcu pliku). Jeśli plik nie istnieje,
zostaje utworzony. Wyjście jest zawsze dopisywane na końcu pliku. POSIX
milczy na temat początkowej pozycji odczytu, przy korzystaniu z tego
trybu. W przypadku glibc, początkową pozycją pliku do odczytywania jest
początek pliku, lecz Android/BSD/MacOS ustawiają początkową pozycję pliku do
odczytywania na końcu pliku.
.PP
Łańcuch \fImode\fP może także zawierać literę \[Bq]b\[rq] zarówno jak ostatni
znak jak też jako znak umieszczony pomiędzy znakami dowolnego dwuznakowego
łańcucha opisanego powyżej. Służy to wyłącznie zgodności z ISO C i nie
powoduje żadnego efektu, \[Bq]b\[rq] jest ignorowane we wszystkich systemach
zgodnych z POSIX, włączając Linuksa (inne systemy mogą różnie traktować
pliki tekstowe i pliki binarne; dodanie \[Bq]b\[rq] może być dobrym
pomysłem, jeśli wykonywane są operacje wejścia/wyjścia dla pliku binarnego a
przewidywane jest przeniesienie programu do środowisk nieuniksowych).
.PP
Więcej informacji o rozszerzeniach glibc dla \fImode\fP zawarto w UWAGACH.
.PP
Wszystkie pliki będą tworzone z uprawnieniami \fBS_IRUSR\fP | \fBS_IWUSR\fP |
\fBS_IRGRP\fP | \fBS_IWGRP\fP | \fBS_IROTH\fP | \fBS_IWOTH\fP (0666), zmodyfikowanymi
przez wartość umask procesu (patrz \fBumask\fP(2)).
.PP
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
\fBfseek\fP(3) lub \fBfsetpos\fP(3) pomiędzy operacjami zapisu i odczytu na takim
strumieniu. Ta operacja może być pozornym rozkazem pustym, no\-op, (tak jak w
\fIfseek(..., 0L, SEEK_CUR\fP) wywoływanym w celu wykorzystania ubocznych
skutków synchronizujących.
.PP
Otwarcie pliku w trybie dopisywania (\fBa\fP jako pierwszy znak \fImode\fP)
powoduje, że wszystkie późniejsze operacje zapisu do tego strumienia
wystąpią na końcu pliku, tak jakby były poprzedzone wywołaniem
.PP
.in +4n
.EX
fseek(stream, 0, SEEK_END);
.EE
.in
.PP
Deskryptor pliku związany ze strumieniem jest otwierany w taki sposób, jak
przy wywołaniu \fBopen\fP(2) z następującymi znacznikami:
.RS
.TS
allbox;
lb lb
c l.
tryb fopen()	znaczniki open()
\fIr\fP	O_RDONLY
\fIw\fP	O_WRONLY | O_CREAT | O_TRUNC
\fIa\fP	O_WRONLY | O_CREAT | O_APPEND
\fIr+\fP	O_RDWR
\fIw+\fP	O_RDWR | O_CREAT | O_TRUNC
\fIa+\fP	O_RDWR | O_CREAT | O_APPEND
.TE
.RE
.\"
.SS fdopen()
.\"
Funkcja \fBfdopen\fP() wiąże strumień z istniejącym deskryptorem pliku,
\fIfd\fP. Łańcuch \fImode\fP strumienia (jeden z \[Bq]r\[rq], \[Bq]r+\[rq],
\[Bq]w\[rq], \[Bq]w+\[rq], \[Bq]a\[rq], \[Bq]a+\[rq]) musi być zgodny z
trybem otwarcia deskryptora pliku. Pozycja nowego strumienia jest taka sama,
jak pozycja deskryptora \fIfd\fP, a znaczniki błędu i końca pliku są
wyłączane. Tryby \[Bq]w\[rq] oraz \[Bq]w+\[rq] nie powodują usunięcia
zawartości pliku. Deskryptor pliku nie jest powielany i zostanie zamknięty w
chwili zamknięcia strumienia utworzonego za pomocą \fBfdopen\fP(). Rezultat
wywołania funkcji \fBfdopen\fP() dla obiektu pamięci dzielonej jest
niezdefiniowany.
.SS freopen()
Funkcja \fBfreopen\fP() otwiera plik, którego nazwa jest zawarta w łańcuchu
wskazywanym przez \fIpathname\fP i wiąże z nim strumień wskazywany przez
\fIstream\fP. Pierwotny strumień jest zamykany (jeśli istnieje). Argument
\fImode\fP ma takie samo znaczenie jak w przypadku funkcji \fBfopen\fP().
.PP
Jeśli argument \fIpathname\fP jest wskaźnikiem pustym, \fBfreopen\fP() zmienia
tryb strumienia na tryb określony w \fImode\fP; to jest \fBfreopen\fP() otwiera
ponownie ścieżkę, która jest związana ze strumieniem. Określenie tego
zachowania zostało dodane w standardzie C99, które opisuje go następująco:
.PP
.RS
W takim przypadku, deskryptor pliku związany ze strumieniem nie musi być
zamknięty, jeśli wywołanie do \fBfreopen\fP() powiedzie się. Od implementacji
zależy, które zmiany trybów są dozwolone (o ile w ogóle) i w jakich
okolicznościach.
.RE
.PP
Podstawowym zastosowaniem funkcji \fBfreopen\fP() jest zmiana pliku związanym
ze standardowym strumieniem tekstowym (\fIstderr\fP, \fIstdin\fP lub \fIstdout\fP).
.SH "WARTOŚĆ ZWRACANA"
Jeśli funkcja \fBfopen\fP(), \fBfdopen\fP() czy \fBfreopen\fP() zakończy się
pomyślnie, zwraca wskaźnik do struktury \fBFILE\fP. W przeciwnym wypadku zwraca
NULL a zmiennej globalnej \fIerrno\fP nadawana jest wartość określającą rodzaj
błędu.
.SH BŁĘDY
.TP 
\fBEINVAL\fP
Argument \fImode\fP podany dla \fBfopen\fP(), \fBfdopen\fP() lub \fBfreopen\fP() jest
nieprawidłowy.
.PP
Funkcje \fBfopen\fP(), \fBfdopen\fP() i \fBfreopen\fP() mogą także zakończyć się
niepowodzeniem i ustawić wartość \fIerrno\fP na dowolny błąd wymieniony w
opisie funkcji \fBmalloc\fP(3).
.PP
Funkcja \fBfopen\fP() może także zakończyć się niepowodzeniem i ustawić wartość
\fIerrno\fP na dowolny błąd wymieniony w opisie funkcji \fBopen\fP(2).
.PP
Funkcja \fBfdopen\fP() może także zakończyć się niepowodzeniem i ustawić
wartość \fIerrno\fP na dowolny błąd wymieniony w opisie funkcji \fBfcntl\fP(2).
.PP
Funkcja \fBfreopen\fP() może także zakończyć się niepowodzeniem i ustawić
wartość \fIerrno\fP na dowolny błąd wymieniony w opisie funkcji \fBopen\fP(2),
\fBfclose\fP(3) i \fBfflush\fP(3).
.SH ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku
\fBattributes\fP(7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interfejs	Atrybut	Wartość
T{
\fBfopen\fP(),
\fBfdopen\fP(),
\fBfreopen\fP()
T}	Bezpieczeństwo wątkowe	MT\-bezpieczne
.TE
.hy
.ad
.sp 1
.SH STANDARDY
\fBfopen\fP(), \fBfreopen\fP(): POSIX.1\-2001, POSIX.1\-2008, C99.
.PP
\fBfdopen\fP(): POSIX.1\-2001, POSIX.1\-2008.
.SH UWAGI
.SS "Uwagi dla glibc"
Biblioteka GNU C umożliwia stosowanie następujących rozszerzeń dla łańcucha
podanego w \fImode\fP:
.TP 
\fBc\fP (od glibc 2.3.3)
W przypadku operacji otwarcia lub kolejnych operacji odczytu i zapisu, nie
robi punktów anulowania (cancellation point) wątku. Znacznik ten jest
ignorowany w przypadku \fBfdopen\fP().
.TP 
\fBe\fP (od glibc 2.7)
Otwiera plik ze znacznikiem \fBO_CLOEXEC\fP. Więcej informacji w podręczniku
\fBopen\fP(2). Znacznik ten jest ignorowany w przypadku \fBfdopen\fP().
.TP 
\fBm\fP (od glibc 2.3)
.\" As at glibc 2.4:
Próbuje uzyskać dostęp do pliku za pomocą \fBmmap\fP(2), zamiast wywołań
systemowych wejścia/wyjścia (\fBread\fP(2), \fBwrite\fP(2)). Obecnie, próba
korzystania z \fBmmap\fP(2) nastąpi tylko, gdy plik jest otwierany do odczytu.
.TP 
\fBx\fP
.\" Since glibc 2.0?
.\" FIXME . C11 specifies this flag
Otwiera plik na wyłączność (jak przy znaczniku \fBO_EXCL\fP \fBopen\fP(2)). Jeśli
plik już istnieje, \fBfopen\fP() zawodzi i ustawia \fIerrno\fP na
\fBEEXIST\fP. Znacznik ten jest ignorowany w przypadku \fBfdopen\fP().
.PP
Oprócz powyższych znaków, \fBfopen\fP() i \fBfreopen\fP() obsługują ponadto
następującą składnię w \fImode\fP:
.PP
\fB ,ccs=\fP\fIłańcuch\fP
.PP
Podany \fIstring\fP jest przyjmowany jako nazwa zakodowanego zestawu znaków, a
strumień jest oznaczany jako zorientowany szeroko. Od tego momentu,
wewnętrzna funkcje konwertujące przekształcają wejście/wyjście na i z
zestawu znaków \fIstring\fP. Jeśli nie użyje się składni \fB,ccs=\fP\fIstring\fP, to
szerokie zorientowanie strumienia jest ustalane po pierwszej operacji na
pliku. Jeśli operacja ta działa na szerokich znakach, to strumień jest
oznaczany jako zorientowany szeroko i ładowane są funkcje służące do
konwersji na zakodowany zestaw znaków.
.SH USTERKI
.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12685
Przy przetwarzaniu \fImode\fP pod kątem wyodrębnienia poszczególnych znaków
znaczników (tj. znaków poprzedzających określenie \[Bq]ccs\[rq]),
implementacja glibc \fBfopen\fP() i \fBfreopen\fP() ogranicza liczbę znaków
sprawdzanych w \fImode\fP do 7 (lub, przed glibc 2.14, do 6, co nie było
wystarczające do uwzględnienia możliwych określeń takich jak
\[Bq]rb+cmxe\[rq]). Bieżąca implementacja \fBfdopen\fP() sprawdza co najwyżej 5
znaków w \fImode\fP.
.SH "ZOBACZ TAKŻE"
\fBopen\fP(2), \fBfclose\fP(3), \fBfileno\fP(3), \fBfmemopen\fP(3), \fBfopencookie\fP(3),
\fBopen_memstream\fP(3)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Adam Byrtek <alpha@irc.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
