.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" 1999 PTM Przemek Borys .\" Last update: A. Krzysztofowicz , Aug 2002, .\" manpages 1.53 .\" .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" 1993 Michael Haardt, Ian Jackson. .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Modified Wed Jul 21 22:42:16 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified Sun Aug 21 18:18:14 1994: Michael Haardt's NFS diffs were .\" applied by hand (faith@cs.unc.edu). .\" Modified Sat Apr 13 16:25:28 1996 by Andries Brouwer (aeb@cwi.nl) .\" Modified Mon May 13 00:53:52 1996: added symbolic constants .\" as sent by Thomas Koenig .\" Modified Fri Dec 20 16:06:45 1996 by Michael Haardt: More NFS details .\" Modified Fri Feb 19 15:08:34 1999 by Andries Brouwer (aeb@cwi.nl) .\" Modified 981128 by Joseph S. Myers .\" Modified Thu Jun 3 19:29:06 1999 by Michael Haardt: NFS lock optimisation .\" Modified, 7 May 2002, Michael Kerrisk .\" .TH OPEN 2 1999-06-03 "Linux" "Wywołania systemowe" .SH NAZWA open, creat \- otwarcie i utworzenie pliku lub urządzenia .SH SKŁADNIA .nf .B #include .B #include .B #include .sp .BI "int open(const char *" pathname ", int " flags ); .BI "int open(const char *" pathname ", int " flags ", mode_t " mode ); .BI "int creat(const char *" pathname ", mode_t " mode ); .fi .SH OPIS \fI Uwaga! To tłumaczenie może być nieaktualne!\fP .PP Funkcja systemowa .B 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 .BR 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 .BR fork (2).) Nowt deskryptor pliku będzie przekazywany przez wywołania funkcji exec (zobacz .BR fcntl (2)). Przesunięcie pliku jest ustawiane na jego początek. Parametr .I flags to jedna z wartości: .BR 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 .I flags może być połączony bitowym .I OR z zerem lub więcej spośród następujących wartości: .TP .B 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 .I bsdgroups i .I sysvgroups dla systemu plików ext2 opisane w .BR mount (8)). .TP .B O_EXCL Gdy zostanie użyte w połączeniu z .BR O_CREAT , to jeśli plik już istnieje, .B open się nie powiedzie. W tym kontekście dowiązanie symboliczne jest istniejącym plikiem, niezależnie od tego, na co wskazuje. .B O_EXCL nie działa jak należy na systemach plików NFS. Programy, które nadmiernie ufają wykonywaniu przez .B 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 .BR link (2) do utworzenia dowiązania do pliku-blokady. Jeśli \fBlink()\fP zwróci 0, to utworzenie blokady się powiodło. W przeciwnym razie, należy użyć .BR 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. .TP .B O_NOCTTY Jeśli .I pathname odnosi się do urządzenia terminalowego \(em zobacz .BR tty (4) \(em to nie stanie się terminalem sterującym procesu, nawet jeśli proces takiego nie ma. .TP .B 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.) .TP .B O_APPEND Plik jest otwierany w trybie dopisywania. Przed każdą operacją .BR write , wskaźnik pliku jest ustawiany na koniec pliku, jak z .BR lseek . .B 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. .TP .BR O_NONBLOCK " lub " O_NDELAY Plik jest otwierany w trybie nieblokującym, o ile to możliwe. Ani .B 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 .BR fifo (4). Ten tryb może nie mieć żadnego wpływu na pliki inne niż FIFO. .TP .B O_SYNC Plik jest otwierany dla synchronicznego we/wy. Wszelkie zapisy .B write na otrzymanym deskryptorze pliku będą blokować proces wołający aż do fizycznego zapisania danych na odpowiednim nośniku. .I Jednak, zobacz niżej USTERKI. .TP .B O_NOFOLLOW Jeśli \fIpathname\fR 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. \fIJądra poprzedzające 2.1.126 zignorują go, jeśli jest używany\fR. .TP .B O_DIRECTORY Jeśli \fIpathname\fR 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 \fBopendir\fR(3) jest wywołane dla FIFO lub dla urządzenia taśmowego, ale nie powinno być używane poza implementacją \fBopendir\fR. .TP .B 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 .BR read (2) lub .BR 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. .\" Mogą wystąpić problemy ze spójnością. .br Ten znacznik jest wspierany przez wiele systemów uniksopodobnych; w Linuksie, wsparcie zostało dodane w jądrze wersji 2.4.10. .br Semantycznie podobny interfejs dla urządzeń blokowych opisano w .BR raw (8). .TP .B O_ASYNC Generowanie sygnału (domyślnie SIGIO, ale można go zmienić za pomocą .BR 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 .BR fcntl (2). .TP .B 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. .PP Pewne z tych znaczników można zmieniać za pomocą .BR fcntl już po otwarciu pliku. Argument .I mode określa prawa, które będą używane do ewentualnego tworzenia nowego pliku. Są one modyfikowane przez .BR umask procesu w zwykły sposób: prawa tworzonego pliku to .BR "(mode & ~umask)" . Należy zauważyć, że te uprawnienia dotyczą jedynie dostępu do nowo utworzonego pliku w przyszłości; wywołanie .BR open , które tworzy plik tylko do obczytu może równie dobrze zwrócić deskryptor pliku do odczytu i zapisu. .PP Dla parametru .IR mode udostępniono następujące stałe symboliczne: .TP .B S_IRWXU 00700 użytkownik (właściciel pliku) ma prawa odczytu, zapisu i uruchamiania. .TP .B S_IRUSR (S_IREAD) 00400 użytkownik ma prawa odczytu. .TP .B S_IWUSR (S_IWRITE) 00200 użytkownik ma prawa zapisu. .TP .B S_IXUSR (S_IEXEC) 00100 użytkownik ma prawa uruchamiania. .TP .B S_IRWXG 00070 grupa ma prawa odczytu, zapisu i uruchamiania. .TP .B S_IRGRP 00040 grupa ma prawa odczytu. .TP .B S_IWGRP 00020 grupa ma prawa zapisu. .TP .B S_IXGRP 00010 grupa ma prawa uruchamiania. .TP .B S_IRWXO 00007 inni mają prawa odczytu, zapisu i uruchamiania. .TP .B S_IROTH 00004 inni mają prawa odczytu. .TP .B S_IWOTH 00002 inni mają prawa zapisu. .TP .B S_IXOTH 00001 inni mają prawa uruchamiania. .PP .I mode musi być podane, gdy w .I flags używany jest znacznik .BR O_CREAT , w przeciwnym wypadku jest ignorowane. .B creat jest równoważne .B open z argumentem .I flags ustawionym na .BR O_CREAT|O_WRONLY|O_TRUNC . .SH "WARTOŚĆ ZWRACANA" .BR open " i " creat zwracają nowy deskryptor pliku, lub \-1 w wypadku błędu (w tym drugim wypadku ustawiane jest też odpowiednio .IR errno ). Należy zauważyć, że .B open może otwierać pliki urządzeń, lecz .B creat nie może ich tworzyć. Zamiast niego należy używać .BR mknod (2). .LP Na systemach NFS z włączonym mapowaniem UID-ów, \fBopen\fP może zwrócić deskryptor pliku, dla którego np. żadania \fBread\fP(2) są zabronione przy ustawionym \fBEACCES\fP. 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. .SH BŁĘDY .TP .B EEXIST .I pathname już istnieje, a użyto .BR O_CREAT " i " O_EXCL . .TP .B EISDIR .I pathname odnosi się do katalogu, a żądany był dostęp z prawem zapisu (tzn. ustwine było .B O_WRONLY lub .BR O_RDWR ). .TP .B EACCES Żądany dostęp do pliku nie jest dozwolony, jeden z katalogów w .IR pathname nie ma praw przeszukiwania (wykonywania), lub plik nie istnieje, a katalog nadrzędny nie ma praw zapisu. .TP .B ENAMETOOLONG .IR pathname " było zbyt długie." .TP .B ENOENT O_CREAT nie było ustawione, a plik o zadanej nazwie nie istnieje. Lub, składnik .IR pathname , który powinien być katalogiem nie istnieje lub jest wiszącym dowiązaniem symbolicznym. .TP .B ENOTDIR Składnik użyty w .I pathname jako katalog w rzeczywistości nie jest katalogiem lub podano \fBO_DIRECTORY\fR, a .I pathname nie było katalogiem. .TP .B 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. .TP .B ENODEV .I 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) .TP .B EROFS .I pathname odnosi się do pliku na systemie plików tylko dla odczytu, a żądano otwarcia w trybie zapisu. .TP .B ETXTBSY .I pathname odnosi się do wykonywalnego obrazu, który obecnie jest wykonywany, a zażądano dostępu dla zapisu. .TP .B EFAULT .IR pathname " wskazuje poza dostępną dla użytkownika przestrzeń adresową." .TP .B ELOOP Podczas rozwiązywania .I pathname napotkano zbyt wiele dowiązań symbolicznych lub podano \fBO_NOFOLLOW\fR, a .I pathname jest dowiązaniem symbolicznym. .TP .B ENOSPC Gdy .I pathname miało być utworzone, okazało się, że na urządzeniu na którym miało się znajdować brak miejsca na nowy plik. .TP .B ENOMEM Brak dostępnej pamięci jądra. .TP .B EMFILE Proces ma jyż otwartą maksymalną liczbę plików. .TP .B ENFILE Osiągnięto ograniczenie dla łącznej liczby otwartych plików w systemie. .SH "ZGODNE Z" SVr4, SVID, POSIX, X/OPEN, BSD 4.3 Znaczniki .B O_NOFOLLOW i .B O_DIRECTORY są specyficzne dla Linuksa. Aby uzyskać ich definicje, należy zdefiniować makro .BR _GNU_SOURCE . .SH OGRANICZENIA Jest wiele nieszczęśliwości w protokole podległym NFS, dotykających między innymi .BR O_SYNC " i " O_NDELAY . POSIX zapewnia trzy różne warianty synchronicznego we/wy, odpowiadające znacznikom \fBO_SYNC\fR, \fBO_DSYNC\fR i \fBO_RSYNC\fR. Aktualnie (2.1.130) są one pod Linuksem synonimami. .SH "ZOBACZ TAKŻE" .BR read (2), .BR write (2), .BR fcntl (2), .BR close (2), .BR link (2), .BR mknod (2), .BR mount (2), .BR stat (2), .BR umask (2), .BR unlink (2), .BR socket (2), .BR fopen (3), .BR fifo (4) .SH "INFORMACJE O TŁUMACZENIU" Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i \fImoże nie być aktualne\fR. 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: .IP man \-\-locale=C 2 open .PP Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages\-pl/.