Provided by:
manpages-pl-dev_20060617-3_all 
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.