jammy (3) freopen.3.gz

Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

       fopen, fdopen, freopen - funkcje otwarcia strumienia

SKŁADNIA

       #include <stdio.h>

       FILE *fopen(const char *pathname, const char *mode);

       FILE *fdopen(int fd, const char *mode);

       FILE *freopen(const char *pathname, const char *mode, FILE *stream);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       fdopen(): _POSIX_C_SOURCE

OPIS

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

       The  argument mode points to a string beginning with one of the following sequences (possibly followed by
       additional characters, as described below):

       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+     Open  for  reading  and  appending  (writing  at end of file).  The file is created if it does not
              exist.  Output is always appended to the end of the file.  POSIX is silent  on  what  the  initial
              read position is when using this mode.  For glibc, the initial file position for reading is at the
              beginning of the file, but for Android/BSD/MacOS, the initial file position for reading is at  the
              end of the file.

       Ł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 C89  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.)

       See NOTES below for details of glibc extensions for mode.

       Any created file will have the mode S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666),  as
       modified by the process's umask value (see 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(3) lub fgetpos(3) 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);

       The file descriptor associated with the stream is opened as if by a call to open(2)  with  the  following
       flags:

              ┌─────────────┬───────────────────────────────┐
              │fopen() modeopen() flags                  │
              ├─────────────┼───────────────────────────────┤
              │     r       │ O_RDONLY                      │
              ├─────────────┼───────────────────────────────┤
              │     w       │ O_WRONLY | O_CREAT | O_TRUNC  │
              ├─────────────┼───────────────────────────────┤
              │     a       │ O_WRONLY | O_CREAT | O_APPEND │
              ├─────────────┼───────────────────────────────┤
              │     r+      │ O_RDWR                        │
              ├─────────────┼───────────────────────────────┤
              │     w+      │ O_RDWR | O_CREAT | O_TRUNC    │
              ├─────────────┼───────────────────────────────┤
              │     a+      │ O_RDWR | O_CREAT | O_APPEND   │
              └─────────────┴───────────────────────────────┘
   fdopen()
       Funkcja  fdopen()  wiąże  strumień z istniejącym deskryptorem pliku, fd. Ł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 fd, 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.

   freopen()
       Funkcja freopen() otwiera plik, którego nazwa jest zawarta w łańcuchu wskazywanym przez pathname 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().

       If the pathname argument is a null pointer, freopen()  changes the mode of the stream to  that  specified
       in  mode;  that is, freopen() reopens the pathname that is associated with the stream.  The specification
       for this behavior was added in the C99 standard, which says:

              In this case, the file descriptor associated with the stream need not be closed  if  the  call  to
              freopen()   succeeds.   It is implementation-defined which changes of mode are permitted (if any),
              and under what circumstances.

       The primary use of the freopen()  function is to change the file associated with a standard  text  stream
       (stderr, stdin, or 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).

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌─────────────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├─────────────────────────────┼────────────────────────┼─────────┤
       │fopen(), fdopen(), freopen() │ Bezpieczeństwo wątkowe │ MT-Safe │
       └─────────────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       fopen(), freopen(): POSIX.1-2001, POSIX.1-2008, C89, C99.

       fdopen(): POSIX.1-2001, POSIX.1-2008.

UWAGI

   Uwagi dla glibc
       The GNU C library allows the following extensions for the string specified in mode:

       c (od wersji 2.3.3 biblioteki glibc)
              Do  not  make  the  open  operation,  or subsequent read and write operations, thread cancellation
              points.  This flag is ignored for fdopen().

       e (od wersji 2.7 biblioteki glibc)
              Open the file with the O_CLOEXEC flag.  See open(2)  for more information.  This flag  is  ignored
              for fdopen().

       m (od wersji 2.3 biblioteki glibc)
              Attempt  to  access  the  file  using  mmap(2),  rather than I/O system calls (read(2), write(2)).
              Currently, use of mmap(2)  is attempted only for a file opened for reading.

       x      Open the file exclusively (like the O_EXCL flag of open(2)).  If the file already exists,  fopen()
              fails, and sets errno to EEXIST.  This flag is ignored for fdopen().

       In addition to the above characters, fopen()  and freopen()  support the following syntax in mode:

        ,ccs=string

       The given string is taken as the name of a coded character set and the stream is marked as wide-oriented.
       Thereafter, internal conversion functions convert I/O to and from  the  character  set  string.   If  the
       ,ccs=string  syntax  is not specified, then the wide-orientation of the stream is determined by the first
       file operation.  If that operation is a wide-character operation, the stream is marked wide-oriented, and
       functions to convert to the coded character set are loaded.

BŁĘDY

       When  parsing  for  individual  flag  characters  in  mode  (i.e.,  the  characters  preceding  the "ccs"
       specification), the glibc implementation of fopen()  and  freopen()   limits  the  number  of  characters
       examined  in mode to 7 (or, in glibc versions before 2.14, to 6, which was not enough to include possible
       specifications such as "rb+cmxe").  The current implementation of fdopen()  parses at most  5  characters
       in mode.

ZOBACZ TAKŻE

       open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3), open_memstream(3)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis projektu, informacje
       dotyczące   zgłaszania   błędów   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

T◈UMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony podręcznika są: Adam Byrtek <alpha@irc.pl> i Andrzej
       Krzysztofowicz <ankry@green.mf.pg.gda.pl>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje  o  warunkach  licencji  można  uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej  ⟨manpages-pl-
       list@lists.sourceforge.net⟩.