focal (2) openat.2.gz

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/.