Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       open, creat - otwarcie i utworzenie pliku lub urzdzenia

SK/LADNIA

       #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

       Funkcja  systemowa  open  sluy  do  przeksztalcenia cieki na deskryptor
       pliku (mal, nieujemn liczb  calkowit  uywan  w  poniejszych  operacjach
       we/wy,  takich jak read, write, itd.).  Jeli wywolanie si powiedzie, to
       zwrocony deskryptor pliku bdzie  najmniejszym  aktualnie  nie  otwartym
       deskryptorem  pliku  dla  tego procesu.  Funkcja ta tworzy nowy otwarty
       plik, nie wspoldzielony z adnym  innym  procesem.   (Ale  wspoldzielone
       otwarte  pliki  mog  pochodzi  z wywolania funkcji systemowej fork(2).)
       Nowt deskryptor pliku bdzie przekazywany przez wywolania  funkcji  exec
       (zobacz fcntl(2)).  Przesunicie pliku jest ustawiane na jego pocztek.

       Parametr flags to jedna z wartoci: O_RDONLY, O_WRONLY lub O_RDWR, ktore
       stanowi, odpowiednio, dania  otwarcia  tylko  dla  odczytu,  tylko  dla
       zapisu,  lub  dla  odczytu  i  zapisu.   Argument flags moe by polczony
       bitowym OR z zerem lub wicej sporod nastpujcych wartoci:

       O_CREAT
              Jeli plik nie  istnieje,  to  bdzie  utworzony.   Wlaciciel  (ID
              uytkownika) tego pliku jest ustawiany na efektywny ID uytkownika
              procesu. Grupa wlaciciela (ID  grupy)  jest  ustawiana  albo  na
              efektywny ID grupy procesu. albo na ID grupy katalogu nadrzdnego
              (w zalenoci  od  rodzaju  systemu  plikow,  opcji  montowania  i
              atrybutow  katalogu  nadrzdnego,  zobacz  np.  opcje  montowania
              bsdgroups  i  sysvgroups  dla  systemu  plikow  ext2  opisane  w
              mount(8)).

       O_EXCL Gdy  zostanie  uyte  w  polczeniu  z  O_CREAT,  to  jeli plik ju
              istnieje, open si  nie  powiedzie.  W  tym  kontekcie  dowizanie
              symboliczne  jest  istniejcym plikiem, niezalenie od tego, na co
              wskazuje.  O_EXCL nie dziala jak naley na systemach plikow  NFS.
              Programy,  ktore  nadmiernie  ufaj  wykonywaniu  przez open zada
              blokowania,  bd  zawiera  wycig.  Rozwizanie   dla   wykonywania
              atomowych  operacji  blokowania  plikow  za  pomoc pliku-blokady
              polega na utworzeniu unikalnego  pliku  na  tym  samym  systemie
              plikow  (np.  wykorzystujc  nazw hosta i PID) i uyciu link(2) do
              utworzenia dowizania do pliku-blokady. Jeli link() zwroci 0,  to
              utworzenie  blokady  si  powiodlo.  W przeciwnym razie, naley uy
              stat(2) na unikalnym pliku, aby sprawdzi, czy  ilo  jego  dowiza
              wzrosla  do  2.   W takiej sytuacji utworzenie blokady rownie si
              powiodlo.

       O_NOCTTY
              Jeli pathname odnosi si do  urzdzenia  terminalowego  --  zobacz
              tty(4)  --  to nie stanie si terminalem sterujcym procesu, nawet
              jeli proces takiego nie ma.

       O_TRUNC
              Jeli plik ju istnieje, jest  zwyklym  plikiem  i  tryb  otwarcia
              pozwala na zapis (tzn. jest to O_RDWR lub O_WRONLY), to plik ten
              zostanie obcity do  zerowej  dlugoci.  Jeli  plik  to  FIFO  lub
              urzdzenie  terminalowe,  to  znacznik O_TRUNC jest ignorowany. W
              pozostalych  przypadkach  efekt  uycia  znacznika  O_TRUNC  jest
              nieokrelony.  (W  wielu wersjach Linuksa zostanie zignorowany, w
              innych wersjach funkcja zwroci bld.)

       O_APPEND
              Plik jest otwierany w  trybie  dopisywania.  Przed  kad  operacj
              write,  wskanik  pliku  jest  ustawiany  na  koniec pliku, jak z
              lseek.  O_APPEND moe prowadzi do zepsucia  plikow  na  systemach
              plikow  NFS,  gdy  wicej  ni jeden proces naraz dopisuje dane do
              pliku. Jest to zwizane z faktem, e NFS nie  wspiera  dopisywania
              do  pliku, wic jdro klienta musi to zasymulowa, co nie moe zosta
              wykonane bez wycigu.

       O_NONBLOCK lub O_NDELAY
              Plik jest otwierany w trybie nieblokujcym, o ile to moliwe.  Ani
              open  ani  kolejne  operacje  na  zwroconym  przez  to wywolanie
              deskryptorze nie  spowoduj  blokowania  procesu  (zatrzymania  w
              oczekiwaniu  na  dane,  itp.).   Szczegoly dotyczce obslugi FIFO
              (nazwanych potokow) mona znale w fifo(4).  Ten tryb moe nie  mie
              adnego wplywu na pliki inne ni FIFO.

       O_SYNC Plik  jest  otwierany dla synchronicznego we/wy. Wszelkie zapisy
              write na otrzymanym deskryptorze pliku bd blokowa proces wolajcy
              a do fizycznego zapisania danych na odpowiednim noniku.  Jednak,
              zobacz niej USTERKI.

       O_NOFOLLOW
              Jeli pathname jest dowizaniem symbolicznym, to otwarcie  si  nie
              powiedzie. Jest to rozszerzenie FreeBSD, ktore zostalo dodane do
              Linuksa w wersji 2.1.126. Nadal bdzie si odbywa przechodzenie po
              dowizaniach  symbolicznych  we  wczeniejszych skladnikach cieki.
              Pliki naglowkome w glibc 2.0.100 i poniejszych zawieraj definicj
              tego znacznika. Jdra poprzedzajce 2.1.126 zignoruj go, jeli jest
              uywany.

       O_DIRECTORY
              Jeli pathname nie jest katalogiem, spowoduje, e open  zawiedzie.
              Ten  znacznik  jest  specyficzny  dla Linuksa i zostal do dany w
              kernelu 2.1.126, aby unikn problemow blokowania uslug (DoS), gdy
              opendir(3)  jest  wywolane  dla FIFO lub dla urzdzenia tamowego,
              ale nie powinno by uywane poza implementacj opendir.

       O_DIRECT
              Powoduje prob zminimalizowania efektow zwizanych  z  buforowanie
              we/wy  do  i  z  tego  pliku.  Na ogol spowoduje to zmniejszenie
              wydajnoci, ale jest to przydatne w specyficznych sytuacjach,  na
              przyklad  gdy  aplikacje  buforuj we wlasnym zakresie. We/wy dla
              pliku odbywa si wowczas bezporednio z/do buforow  w  przestrzeni
              uytkownika. We/wy jest sunchromiczne, tzn. po zakoczeniu funkcji
              systemowej read(2) lub  write(2)  zagwarantowane  jest,  e  dane
              zostaly  przeniesione.  Wielkoci przesylanych danych, wyrownania
              buforow w przestrzeni uytkownika oraz pozycje w  pliku  musz  by
              wielokrotnociami rozmiaru logicznego bloku systemu plikow.
              Ten    znacznik    jest    wspierany    przez   wiele   systemow
              uniksopodobnych; w Linuksie, wsparcie  zostalo  dodane  w  jdrze
              wersji 2.4.10.
              Semantycznie  podobny  interfejs  dla urzdze blokowych opisano w
              raw(8).

       O_ASYNC
              Generowanie sygnalu (domylnie SIGIO, ale mona go zmieni za pomoc
              fcntl(2)),  gdy  wejcie  lub wyjcie poprzez ten deskryptor pliku
              staje si moliwe.  Ta funkcja jest dostpna jedynie dla terminali,
              pseudoterminali   i  gniazd.   Wicej  szczegolow  mona  znale  w
              fcntl(2).

       O_LARGEFILE
              W systemach 32-bitowych,  ktore  wspieraj  obslug  duych  plikow
              (LFS),  zezwala na otwieranie plikow, ktorych rozmiar nie moe by
              reprezentowany jako liczba 31-bitowa.

       Pewne z tych znacznikow mona zmienia za  pomoc  fcntl  ju  po  otwarciu
       pliku.

       Argument  mode  okrela prawa, ktore bd uywane do ewentualnego tworzenia
       nowego pliku.  S one modyfikowane przez umask procesu w zwykly  sposob:
       prawa  tworzonego  pliku  to  (mode  &  ~umask).   Naley  zauway,  e te
       uprawnienia  dotycz  jedynie  dostpu  do  nowo  utworzonego   pliku   w
       przyszloci;  wywolanie  open,  ktore  tworzy  plik tylko do obczytu moe
       rownie dobrze zwroci deskryptor pliku do odczytu i zapisu.

       Dla parametru mode udostpniono nastpujce stale symboliczne:

       S_IRWXU
              00700 uytkownik (wlaciciel pliku) ma  prawa  odczytu,  zapisu  i
              uruchamiania.

       S_IRUSR (S_IREAD)
              00400 uytkownik ma prawa odczytu.

       S_IWUSR (S_IWRITE)
              00200 uytkownik ma prawa zapisu.

       S_IXUSR (S_IEXEC)
              00100 uytkownik 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  uywany jest znacznik O_CREAT, w
       przeciwnym wypadku jest ignorowane.

       creat  jest  rownowane  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 bldu (w
       tym drugim wypadku ustawiane jest te odpowiednio errno).  Naley zauway,
       e open moe otwiera pliki urzdze, lecz creat nie moe ich tworzy. Zamiast
       niego naley uywa mknod(2).

       Na  systemach  NFS  z  wlczonym  mapowaniem  UID-ow,  open  moe  zwroci
       deskryptor  pliku,  dla  ktorego  np.  adania read(2) s zabronione przy
       ustawionym EACCES. Jest to zwizane sprawdzanie uprawnie  odbywa  si  na
       kliencie, ale to serwer wykonuje moapowanie UID-ow podczas da odczytu i
       zapisu.

       Jeli plik jest nowoutworzony, to jego  pola  atime,  ctime  i  mtime  s
       ustawione  na  czas  biecy i to samo dotyczy pol ctime i mtime katalogu
       nadrzdnego.  Natomiast  gdy  plik  jest  modyfikowany  z  powodu  uycia
       znacznika O_TRUNC, jego pola ctime i mtime s ustawiane na czas biecy.

B/LDY

       EEXIST pathname ju istnieje, a uyto O_CREAT i O_EXCL.

       EISDIR pathname odnosi si do katalogu, a dany byl dostp z prawem zapisu
              (tzn. ustwine bylo O_WRONLY lub O_RDWR).

       EACCES dany dostp do pliku nie jest  dozwolony,  jeden  z  katalogow  w
              pathname  nie ma praw przeszukiwania (wykonywania), lub plik nie
              istnieje, a katalog nadrzdny nie ma praw zapisu.

       ENAMETOOLONG
              pathname bylo zbyt dlugie.

       ENOENT O_CREAT  nie  bylo  ustawione,  a  plik  o  zadanej  nazwie  nie
              istnieje.   Lub, skladnik pathname, ktory powinien by katalogiem
              nie istnieje lub jest wiszcym dowizaniem symbolicznym.

       ENOTDIR
              Skladnik uyty w pathname jako katalog w rzeczywistoci  nie  jest
              katalogiem   lub   podano   O_DIRECTORY,  a  pathname  nie  bylo
              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 urzdzenia specjalnego, a odpowiadajce mu  urzdzenie
              nie istnieje.

       ENODEV pathname   odnosi   si   do   pliku   urzdzenia  specjalnego,  a
              odpowiadajce mu urzdzenie nie istnieje. (Jest  to  bld  w  jdrze
              Linuksa - ENXIO powinno by zwracane w takiej sytuacji)

       EROFS  pathname  odnosi  si  do  pliku  na  systemie  plikow  tylko dla
              odczytu, a dano otwarcia w trybie zapisu.

       ETXTBSY
              pathname odnosi si do wykonywalnego obrazu, ktory  obecnie  jest
              wykonywany, a zadano dostpu dla zapisu.

       EFAULT pathname wskazuje poza dostpn dla uytkownika przestrze adresow.

       ELOOP  Podczas   rozwizywania  pathname  napotkano  zbyt  wiele  dowiza
              symbolicznych lub podano O_NOFOLLOW, a pathname jest  dowizaniem
              symbolicznym.

       ENOSPC Gdy  pathname  mialo by utworzone, okazalo si, e na urzdzeniu na
              ktorym mialo si znajdowa brak miejsca na nowy plik.

       ENOMEM Brak dostpnej pamici jdra.

       EMFILE Proces ma jy otwart maksymaln liczb plikow.

       ENFILE Osignito ograniczenie  dla  lcznej  liczby  otwartych  plikow  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,  naley  zdefiniowa
       makro _GNU_SOURCE.

OGRANICZENIA

       Jest  wiele  nieszczliwoci w protokole podleglym NFS, dotykajcych midzy
       innymi O_SYNC i O_NDELAY.

       POSIX zapewnia trzy rone warianty synchronicznego  we/wy,  odpowiadajce
       znacznikom  O_SYNC,  O_DSYNC  i  O_RSYNC. Aktualnie (2.1.130) s one pod
       Linuksem synonimami.

ZOBACZ TAKE

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

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.