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