NAZWA
chmod, fchmod, fchmodat - zmiana praw do plikuBIBLIOTEKA
Standardowa biblioteka C ( libc, -lc)SKŁADNIA
#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode); int fchmod(int fd, mode_t mode);
#include <fcntl.h> /* Definicja stałych AT_* */ #include <sys/stat.h>
int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
Wymagane ustawienia makr biblioteki glibc
(patrz feature_test_macros(7)):
fchmod(): Since glibc 2.24: _POSIX_C_SOURCE >= 199309L glibc 2.19 to glibc 2.23 _POSIX_C_SOURCE glibc 2.16 to glibc 2.19: _BSD_SOURCE || _POSIX_C_SOURCE glibc 2.12 to glibc 2.16: _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L glibc 2.11 and earlier: _BSD_SOURCE || _XOPEN_SOURCE >= 500fchmodat():
Od glibc 2.10: _POSIX_C_SOURCE >= 200809L Przed glibc 2.10: _ATFILE_SOURCE
OPIS
The chmod() and fchmod() system calls change a file's mode bits. (The file mode consists of the file permission bits plus the set-user-ID, set-group-ID, and sticky bits.) These system calls differ only in how the file is specified:- •
- chmod() zmienia tryb określonego pliku, którego ścieżka jest podana w pathname, która jest rozwiązana, jeśli jest to link symboliczny.
- •
- fchmod() zmienia tryb pliku przypisanego do deskryptora otwartego pliku fd.
- S_ISUID (04000)
- set-user-ID (ustawia efektywny ID użytkownika procesu na execve(2))
- S_ISGID (02000)
- set-group-ID (ustawia efektywny ID grupy na procesie na execve(2); obowiązkowe blokowanie, jak opisano w fcntl(2); bierze grupę nowego pliku z katalogu nadrzędnego, jak opisano w chown(2) i mkdir(2))
- S_ISVTX (01000)
- bit sticky (flaga ograniczonego usuwania, jak opisano w unlink(2))
- S_IRUSR (00400)
- odczyt przez właściciela
- S_IWUSR (00200)
- zapis przez właściciela
- S_IXUSR (00100)
- wykonanie/wyszukiwanie przez właściciela ("wyszukiwanie" dotyczy katalogów, oraz oznacza możliwość wejścia do katalogu)
- S_IRGRP (00040)
- odczyt przez grupę
- S_IWGRP (00020)
- zapis przez grupę
- S_IXGRP (00010)
- uruchomianie/przeszukiwanie przez grupę
- S_IROTH (00004)
- odczyt przez pozostałych
- S_IWOTH (00002)
- zapis przez pozostałych
- S_IXOTH (00001)
- uruchomianie/przeszukiwanie przez pozostałych
fchmodat()
Wywołanie systemowe fchmodat() operuje w dokładnie taki sam sposób jak chmod(), z wyjątkiem różnic opisanych tutaj. Jeśli ścieżka podana w ścieżka jest względna, wtedy jest ona interpretowana względem katalogu przypisanego przez deskryptor pliku dirfd (zamiast względem obecnego katalogu roboczego wywołanego procesu, tak jak dzieje się to w przypadku chmod() dla względnych ścieżek. Jeśli ścieżka jest względna, a dirdf ma szczególna wartość AT_FDCWD, wtedy ścieżka jest interpretowana względnie do obecnego katalogu roboczego wywołanego procesu (jak w chmod()). If ścieżka pathname jest bezwzględna, to dirfd jest ignorowane. flags mogą być 0 lub zawierać następujące flagi:- AT_SYMLINK_NOFOLLOW
- Jeśli pathname jest linkiem symbolicznym, nie rozwiązuje go: w zamian operuje na samym linku. Ta flaga nie jest obecnie zaimplementowana.
WARTOŚĆ ZWRACANA
On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.BŁĘDY
W zależności od systemu plików, mogą wystąpić błędy nie wymienione poniżej. Powszechniejsze błędy fchmod są następujące:- EACCES
- Brak praw do przeszukiwania dla składowej ścieżki. (Patrz także path_resolution(7)).
- EBADF
- (fchmod()) The file descriptor fd is not valid.
- EBADF
- (fchmodat()) pathname is relative but dirfd is neither AT_FDCWD nor a valid file descriptor.
- EFAULT
- pathname wskazuje poza dostępną dla użytkownika przestrzeń adresową.
- EINVAL
- (fchmodat()) Invalid flag specified in flags.
- EIO
- Wystąpił błąd wejścia/wyjścia.
- ELOOP
- Podczas rozwiązywania pathname napotkano zbyt wiele dowiązań symbolicznych.
- ENAMETOOLONG
- Ścieżka pathname jest zbyt długa.
- ENOENT
- Plik nie istnieje.
- ENOMEM
- Brak pamięci jądra.
- ENOTDIR
- Składnik ścieżki nie jest katalogiem.
- ENOTDIR
- (fchmodat()) pathname is relative and dirfd is a file descriptor referring to a file other than a directory.
- ENOTSUP
- (fchmodat()) flags specified AT_SYMLINK_NOFOLLOW, which is not supported.
- EPERM
- Efektywny UID nie odpoiwada właścicielowi pliku, a proces nie jest uprzywilejowany (Linux: nie ma funkcjonalności CAP_FOWNER).
- EPERM
- Plik jest oznaczony jako tylko do odczytu lub tylko do nadpisu. (Sprawdź również ioctl_iflags(2).)
- EROFS
- Podany plik znajduje się na systemie plików przeznaczonym tylko do odczytu.
WERSJE
fchmodat() was added in Linux 2.6.16; library support was added in glibc 2.4.STANDARDY
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008. fchmodat(): POSIX.1-2008.UWAGI
Różnice biblioteki C/jądra
Funkcja wrapper fchmodat() z biblioteki GNU C implementuje określony przez POSIX'a interfejs opisany na tej stronie. Ten interfejs różni się od zaszytego w Linuxie wywołania systemowego, które nie ma argumentu flags.Uwagi dla glibc
Na starszych wersjach jądra Linuxa gdzie fchmodat() nie było dostępne, funkcja wrappera z glibc wraca do używania chmod(). Kiedy pathname jest względną ścieżką, glibc konstruuje ścieżkę na bazie linku symbolicznego w /proc/self/fd, który odpowiada argumentowi dirfd.ZOBACZ TAKŻE
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <[email protected]> i Andrzej Krzysztofowicz <[email protected]> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej [email protected]5 lutego 2023 r. | Linux man-pages 6.03 |