open

OPEN(2)                       WywoÅania systemowe                      OPEN(2)



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)