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