Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       open, creat - otwarcie i utworzenie pliku lub urządzenia

SKŁADNIA

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
       int creat(const char *pathname, mode_t mode);

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       Funkcja  systemowa  open  służy  do  przekształcenia  ścieżki na deskryptor pliku (małą, nieujemną liczbę
       całkowitą używaną w późniejszych operacjach we/wy, takich jak read, write, itd.).   Jeśli  wywołanie  się
       powiedzie, to zwrócony deskryptor pliku będzie najmniejszym aktualnie nie otwartym deskryptorem pliku dla
       tego  procesu.   Funkcja  ta  tworzy  nowy otwarty plik, nie współdzielony z żadnym innym procesem.  (Ale
       współdzielone otwarte pliki mogą pochodzić z wywołania  funkcji  systemowej  fork(2).)   Nowt  deskryptor
       pliku  będzie  przekazywany  przez  wywołania  funkcji  exec  (zobacz fcntl(2)).  Przesunięcie pliku jest
       ustawiane na jego początek.

       Parametr flags to jedna z wartości: O_RDONLY, O_WRONLY lub O_RDWR, które stanowią,  odpowiednio,  żądania
       otwarcia  tylko  dla  odczytu,  tylko  dla  zapisu,  lub  dla  odczytu i zapisu.  Argument flags może być
       połączony bitowym OR z zerem lub więcej spośród następujących wartości:

       O_CREAT
              Jeśli plik nie istnieje, to  będzie  utworzony.   Właściciel  (ID  użytkownika)  tego  pliku  jest
              ustawiany na efektywny ID użytkownika procesu. Grupa właściciela (ID grupy) jest ustawiana albo na
              efektywny ID grupy procesu. albo na ID grupy katalogu nadrzędnego (w zależności od rodzaju systemu
              plików, opcji montowania i atrybutów katalogu nadrzędnego, zobacz np. opcje montowania bsdgroups i
              sysvgroups dla systemu plików ext2 opisane w mount(8)).

       O_EXCL Gdy  zostanie  użyte w połączeniu z O_CREAT, to jeśli plik już istnieje, open się nie powiedzie. W
              tym kontekście dowiązanie symboliczne  jest  istniejącym  plikiem,  niezależnie  od  tego,  na  co
              wskazuje.   O_EXCL nie działa jak należy na systemach plików NFS. Programy, które nadmiernie ufają
              wykonywaniu przez open  zadań  blokowania,  będą  zawierać  wyścig.  Rozwiązanie  dla  wykonywania
              atomowych operacji blokowania plików za pomocą pliku-blokady polega na utworzeniu unikalnego pliku
              na  tym samym systemie plików (np. wykorzystując nazwę hosta i PID) i użyciu link(2) do utworzenia
              dowiązania do pliku-blokady. Jeśli  link()  zwróci  0,  to  utworzenie  blokady  się  powiodło.  W
              przeciwnym  razie,  należy użyć stat(2) na unikalnym pliku, aby sprawdzić, czy ilość jego dowiązań
              wzrosła do 2.  W takiej sytuacji utworzenie blokady również się powiodło.

       O_NOCTTY
              Jeśli pathname odnosi się do urządzenia  terminalowego  —  zobacz  tty(4)  —  to  nie  stanie  się
              terminalem sterującym procesu, nawet jeśli proces takiego nie ma.

       O_TRUNC
              Jeśli  plik  już  istnieje,  jest  zwykłym  plikiem i tryb otwarcia pozwala na zapis (tzn. jest to
              O_RDWR lub O_WRONLY), to plik ten zostanie obcięty do zerowej długości. Jeśli  plik  to  FIFO  lub
              urządzenie  terminalowe,  to  znacznik  O_TRUNC  jest  ignorowany. W pozostałych przypadkach efekt
              użycia znacznika O_TRUNC jest nieokreślony. (W wielu  wersjach  Linuksa  zostanie  zignorowany,  w
              innych wersjach funkcja zwróci błąd.)

       O_APPEND
              Plik  jest  otwierany  w  trybie  dopisywania.  Przed  każdą  operacją  write, wskaźnik pliku jest
              ustawiany na koniec pliku, jak z lseek.  O_APPEND może prowadzić do zepsucia plików  na  systemach
              plików  NFS,  gdy więcej niż jeden proces naraz dopisuje dane do pliku. Jest to związane z faktem,
              że NFS nie wspiera dopisywania do pliku, więc jądro klienta  musi  to  zasymulować,  co  nie  może
              zostać wykonane bez wyścigu.

       O_NONBLOCK lub O_NDELAY
              Plik  jest  otwierany  w  trybie nieblokującym, o ile to możliwe. Ani open ani kolejne operacje na
              zwróconym przez  to  wywołanie  deskryptorze  nie  spowodują  blokowania  procesu  (zatrzymania  w
              oczekiwaniu  na dane, itp.).  Szczegóły dotyczące obsługi FIFO (nazwanych potoków) można znaleźć w
              fifo(4).  Ten tryb może nie mieć żadnego wpływu na pliki inne niż FIFO.

       O_SYNC Plik jest otwierany dla synchronicznego we/wy. Wszelkie zapisy write  na  otrzymanym  deskryptorze
              pliku  będą  blokować  proces  wołający  aż do fizycznego zapisania danych na odpowiednim nośniku.
              Jednak, zobacz niżej USTERKI.

       O_NOFOLLOW
              Jeśli pathname jest dowiązaniem symbolicznym, to otwarcie się nie powiedzie. Jest to  rozszerzenie
              FreeBSD,  które zostało dodane do Linuksa w wersji 2.1.126. Nadal będzie się odbywać przechodzenie
              po dowiązaniach symbolicznych we wcześniejszych składnikach  ścieżki.  Pliki  nagłówkome  w  glibc
              2.0.100  i  poźniejszych zawierają definicję tego znacznika. Jądra poprzedzające 2.1.126 zignorują
              go, jeśli jest używany.

       O_DIRECTORY
              Jeśli pathname nie jest katalogiem, spowoduje, że open zawiedzie.  Ten znacznik  jest  specyficzny
              dla  Linuksa i został do dany w kernelu 2.1.126, aby uniknąć problemów blokowania usług (DoS), gdy
              opendir(3) jest wywołane dla FIFO lub dla urządzenia taśmowego, ale nie powinno być  używane  poza
              implementacją opendir.

       O_DIRECT
              Powoduje  próbę zminimalizowania efektów związanych z buforowanie we/wy do i z tego pliku. Na ogół
              spowoduje to zmniejszenie wydajności,  ale  jest  to  przydatne  w  specyficznych  sytuacjach,  na
              przykład  gdy  aplikacje  buforują  we  własnym  zakresie.  We/wy  dla  pliku  odbywa  się wówczas
              bezpośrednio z/do buforów w przestrzeni użytkownika. We/wy jest sunchromiczne, tzn. po zakończeniu
              funkcji systemowej read(2)  lub  write(2)  zagwarantowane  jest,  że  dane  zostały  przeniesione.
              Wielkości  przesyłanych  danych, wyrównania buforów w przestrzeni użytkownika oraz pozycje w pliku
              muszą być wielokrotnościami rozmiaru logicznego bloku systemu plików.
              Ten znacznik jest wspierany przez wiele systemów uniksopodobnych;  w  Linuksie,  wsparcie  zostało
              dodane w jądrze wersji 2.4.10.
              Semantycznie podobny interfejs dla urządzeń blokowych opisano w raw(8).

       O_ASYNC
              Generowanie  sygnału  (domyślnie  SIGIO, ale można go zmienić za pomocą fcntl(2)), gdy wejście lub
              wyjście poprzez ten deskryptor pliku staje się możliwe.  Ta  funkcja  jest  dostępna  jedynie  dla
              terminali, pseudoterminali i gniazd.  Więcej szczegółów można znaleźć w fcntl(2).

       O_LARGEFILE
              W  systemach  32-bitowych,  które  wspierają  obsługę  dużych  plików (LFS), zezwala na otwieranie
              plików, których rozmiar nie może być reprezentowany jako liczba 31-bitowa.

       Pewne z tych znaczników można zmieniać za pomocą fcntl już po otwarciu pliku.

       Argument mode określa prawa,  które  będą  używane  do  ewentualnego  tworzenia  nowego  pliku.   Są  one
       modyfikowane  przez  umask  procesu  w  zwykły sposób: prawa tworzonego pliku to (mode & ~umask).  Należy
       zauważyć, że te uprawnienia dotyczą jedynie dostępu do nowo utworzonego pliku  w  przyszłości;  wywołanie
       open, które tworzy plik tylko do obczytu może równie dobrze zwrócić deskryptor pliku do odczytu i zapisu.

       Dla parametru mode udostępniono następujące stałe symboliczne:

       S_IRWXU
              00700 użytkownik (właściciel pliku) ma prawa odczytu, zapisu i uruchamiania.

       S_IRUSR (S_IREAD)
              00400 użytkownik ma prawa odczytu.

       S_IWUSR (S_IWRITE)
              00200 użytkownik ma prawa zapisu.

       S_IXUSR (S_IEXEC)
              00100 użytkownik ma prawa uruchamiania.

       S_IRWXG
              00070 grupa ma prawa odczytu, zapisu i uruchamiania.

       S_IRGRP
              00040 grupa ma prawa odczytu.

       S_IWGRP
              00020 grupa ma prawa zapisu.

       S_IXGRP
              00010 grupa ma prawa uruchamiania.

       S_IRWXO
              00007 inni mają prawa odczytu, zapisu i uruchamiania.

       S_IROTH
              00004 inni mają prawa odczytu.

       S_IWOTH
              00002 inni mają prawa zapisu.

       S_IXOTH
              00001 inni mają prawa uruchamiania.

       mode musi być podane, gdy w flags używany jest znacznik O_CREAT, w przeciwnym wypadku jest ignorowane.

       creat jest równoważne open z argumentem flags ustawionym na O_CREAT|O_WRONLY|O_TRUNC.

WARTOŚĆ ZWRACANA

       open  i creat zwracają nowy deskryptor pliku, lub -1 w wypadku błędu (w tym drugim wypadku ustawiane jest
       też odpowiednio errno).  Należy zauważyć, że open może otwierać pliki urządzeń, lecz creat nie  może  ich
       tworzyć. Zamiast niego należy używać mknod(2).

       Na  systemach  NFS  z  włączonym  mapowaniem  UID-ów, open może zwrócić deskryptor pliku, dla którego np.
       żadania read(2) są zabronione przy ustawionym EACCES. Jest to związane sprawdzanie uprawnień  odbywa  się
       na kliencie, ale to serwer wykonuje moapowanie UID-ów podczas żądań odczytu i zapisu.

       Jeśli  plik  jest nowoutworzony, to jego pola atime, ctime i mtime są ustawione na czas bieżący i to samo
       dotyczy pól ctime i mtime katalogu nadrzędnego.  Natomiast gdy plik jest  modyfikowany  z  powodu  użycia
       znacznika O_TRUNC, jego pola ctime i mtime są ustawiane na czas bieżący.

BŁĘDY

       EEXIST pathname już istnieje, a użyto O_CREAT i O_EXCL.

       EISDIR pathname  odnosi  się do katalogu, a żądany był dostęp z prawem zapisu (tzn. ustwine było O_WRONLY
              lub O_RDWR).

       EACCES Żądany dostęp do pliku nie jest dozwolony, jeden z katalogów w pathname nie ma praw przeszukiwania
              (wykonywania), lub plik nie istnieje, a katalog nadrzędny nie ma praw zapisu.

       ENAMETOOLONG
              pathname było zbyt długie.

       ENOENT O_CREAT nie było ustawione, a plik o zadanej nazwie nie istnieje.  Lub, składnik  pathname,  który
              powinien być katalogiem nie istnieje lub jest wiszącym dowiązaniem symbolicznym.

       ENOTDIR
              Składnik  użyty  w  pathname  jako  katalog  w  rzeczywistości  nie  jest  katalogiem  lub  podano
              O_DIRECTORY, a pathname nie było katalogiem.

       ENXIO  Podano O_NONBLOCK | O_WRONLY, plik o zadanej nazwie stanowi  FIFO  i  nie  jest  ono  otwarte  dla
              żadnego  procesu  do  odczytu.  Lub  plik  jest plikiem urządzenia specjalnego, a odpowiadające mu
              urządzenie nie istnieje.

       ENODEV pathname odnosi się do pliku urządzenia specjalnego, a odpowiadające mu urządzenie  nie  istnieje.
              (Jest to błąd w jądrze Linuksa - ENXIO powinno być zwracane w takiej sytuacji)

       EROFS  pathname  odnosi  się  do  pliku  na systemie plików tylko dla odczytu, a żądano otwarcia w trybie
              zapisu.

       ETXTBSY
              pathname odnosi się do wykonywalnego obrazu, który obecnie jest wykonywany, a zażądano dostępu dla
              zapisu.

       EFAULT pathname wskazuje poza dostępną dla użytkownika przestrzeń adresową.

       ELOOP  Podczas rozwiązywania pathname napotkano zbyt wiele dowiązań symbolicznych lub podano  O_NOFOLLOW,
              a pathname jest dowiązaniem symbolicznym.

       ENOSPC Gdy pathname miało być utworzone, okazało się, że na urządzeniu na którym miało się znajdować brak
              miejsca na nowy plik.

       ENOMEM Brak dostępnej pamięci jądra.

       EMFILE Proces ma jyż otwartą maksymalną liczbę plików.

       ENFILE Osiągnięto ograniczenie dla łącznej liczby otwartych plików w systemie.

ZGODNE Z

       SVr4,  SVID,  POSIX,  X/OPEN,  BSD 4.3 Znaczniki O_NOFOLLOW i O_DIRECTORY są specyficzne dla Linuksa. Aby
       uzyskać ich definicje, należy zdefiniować makro _GNU_SOURCE.

OGRANICZENIA

       Jest wiele nieszczęśliwości w protokole podległym NFS, dotykających między innymi O_SYNC i O_NDELAY.

       POSIX zapewnia trzy różne warianty synchronicznego we/wy,  odpowiadające  znacznikom  O_SYNC,  O_DSYNC  i
       O_RSYNC. Aktualnie (2.1.130) są one pod Linuksem synonimami.

ZOBACZ TAKŻE

       read(2),  write(2),  fcntl(2),  close(2),  link(2),  mknod(2),  mount(2),  stat(2),  umask(2), unlink(2),
       socket(2), fopen(3), fifo(4)

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W razie zauważenia różnic między powyższym opisem a rzeczywistym  zachowaniem  opisywanego  programu  lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 open

       Prosimy   o   pomoc   w   aktualizacji   stron   man  -  więcej  informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.

Linux                                              1999-06-03                                            OPEN(2)