NAZWA¶
chown, fchown, lchown - zmiana właściciela pliku
SKŁADNIA¶
#include <sys/types.h>
#include <unistd.h>
int chown(const char *path, uid_t owner, gid_t
group);
int fchown(int fd, uid_t owner, gid_t
group);
int lchown(const char *path, uid_t owner, gid_t
group);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Zmieniony zostaje właściciel pliku określonego przez
path lub przez deskryptor
fd. Tylko superużytkownik
może zmieniać właściciela pliku.
Właściciel pliku może zmieniać tylko grupę
pliku na dowolną grupę, której jest członkiem.
Superużytkownik może zmieniać grupę bez
ograniczeń.
Jeśli
owner lub
group jest podane jako -1, to ten
identyfikator nie jest wtedy zmieniany.
Jeżeli właściciel lub grupa pliku uruchamialnego są
zmieniane przez użytkownika nie posiadającego praw
superużytkownika, to atrybuty S_ISUID i S_ISGID pliku zostaną
wyzerowane. Standard POSIX nie precyzuje, czy atrybuty te powinny być
również zerowane, kiedy to użytkownik root
wywołuje funkcję
chown; zachowanie Linuksa w tym wypadku
zależy od wersji jądra. W przypadku pliku, który nie ma
praw uruchamiawania dla grupy (z wyzerowanym bitem S_IXGRP), bit S_ISGID
oznacza obowiązkowe blokowanie i nie jest zerowany przez
chown.
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu zwracane jest zero. W wypadku
błędu zwracane jest -1 i odpowiednio ustawiane
errno.
BŁĘDY¶
Dla niektórych systemów plików mogą być
zwracane inne błędy niż opisane poniżej.
Najogólniejsze błędy
chown to:
- EPERM
- Efektywny UID nie odpowiada właścicielowi pliku i nie jest
zerem albo owner lub group zostały podane
nieprawidłowo.
- EROFS
- Podany plik znajduje się na systemie plików przeznaczonym
tylko do odczytu.
- EFAULT
- path wskazuje poza dostępną dla użytkownika
przestrzeń adresową.
- ENAMETOOLONG
- path jest zbyt długie.
- ENOENT
- Plik nie istnieje.
- ENOMEM
- Brak pamięci jądra.
- ENOTDIR
- Składnik ścieżki nie jest katalogiem.
- EACCES
- Brak praw do przeszukiwania dla składnika
ścieżki.
- ELOOP
- Podczas rozwiązywania path napotkano zbyt wiele
dowiązań symbolicznych.
Ogólne błędy dla
fchown to:
- EBADF
- Deskryptor pliku jest nieprawidłowy.
- ENOENT
- Zobacz wyżej.
- EPERM
- Zobacz wyżej.
- EROFS
- Zobacz wyżej.
- EIO
- Niskopoziomowy błąd we/wy podczas modyfikacji
i-węzła.
UWAGI¶
W wersjach jądra Linuksa poniżej 2.1.81 (i różnych
od 2.1.46)
chown nie podąża za dowiązaniami
symbolicznymi. Od wersji 2.1.81 Linuksa
chown podąża za
dowiązaniami symbolicznymi, została także dodana nowa
funkcja systemowa
lchown, która nie podąża za
dowiązaniami symbolicznymi. Od wersji 2.1.86 Linuksa, ta nowa funkcja
(mająca taką samą semantykę jak stare
chown) ma taki sam numer funkcji, a
chown otrzymała nowy
numer.
Prototyp dla
fchown jest dostępny jedynie, gdy zdefiniowane jest
_BSD_SOURCE (bezpośrednio, albo pośrednio - nie
definiując _POSIX_SOURCE czy kompilując z
włączoną flagą -ansi).
ZGODNE Z¶
Funkcja
chown jest zgodna z SVr4, SVID, POSIX, X/OPEN. Wersja 4.4BSD
może być używana tylko przez superużytkownika (to
znaczy normalni użytkownicy nie mogą
"podarować" nikomu plików). SVr4 dokumentuje
błędy EINVAL, EINTR, ENOLINK i EMULTIHOP, lecz nie dokumentuje
ENOMEM. POSIX.1 nie dokumentuje błędów ENOMEM i ELOOP.
Funkcja
fchown jest zgodna z 4.4BSD oraz SVr4. SVr4 dokumentuje dodatkowe
błędy EINVAL, EIO, EINTR i ENOLINK.
OGRANICZENIA¶
Semantyka
chown() jest pogwałcona na systemach plików NFS,
z włączonym mapowaniem UID. Dodatkowo, semantyka wszystkich
wywołań systemowych, które uzyskują dostęp
do zawartości plików jest dla NFS pogwałcona, bo
chown() może spowodować natychmiastowe
unieważnienie dostępu do już otwartych plików.
Buforowanie po stronie klienta może spowodować
opóźnienie możliwości uzyskania dostępu do
pliku przez użytkowników innych stacji klienckich w stosunku do
chwili dokonania zmiany właściciela umożliwiającej
ten dostęp.
ZOBACZ TAKŻE¶
chmod(2),
flock(2)
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 chown
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.