.\" -*- coding: UTF-8 -*- .\" Copyright (C) Andreas Gruenbacher, February 2001 .\" Copyright (C) Silicon Graphics Inc, September 2001 .\" Copyright (C) 2015 Heinrich Schuchardt .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH listxattr 2 "2 мая 2024 г." "Linux man\-pages 6.8" .SH ИМЯ listxattr, llistxattr, flistxattr \- выводит список названий расширенных атрибутов .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBssize_t listxattr(const char *\fP\fIpath\fP\fB, char *_Nullable \fP\fIlist\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBssize_t llistxattr(const char *\fP\fIpath\fP\fB, char *_Nullable \fP\fIlist\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBssize_t flistxattr(int \fP\fIfd\fP\fB, char *_Nullable \fP\fIlist\fP\fB, size_t \fP\fIsize\fP\fB);\fP .fi .SH ОПИСАНИЕ Расширенные атрибуты представляют собой пару \fIимя\fP:\fIзначение\fP и связываются с записями inode (файлы, каталоги, символьные ссылки и т.п.). Они являются расширениями к обычным атрибутам, связанным со всеми записями inode в системе (например, данные \fBstat\fP(2)). Полное описание модели расширенных атрибутов можно найти в \fBxattr\fP(7). .P \fBlistxattr\fP() получает список названий расширенных атрибутов, связанных с заданным путем \fIpath\fP в файловой системе. Список помещается в \fIlist\fP вызывающего, который выделил для этого буфер размером \fIsize\fP (задаётся в байтах). Список представляет собой набор названий (заканчивающихся null) один за одним. Названия расширенных атрибутов, к которым вызывающий процесс не может иметь доступ, могут отсутствовать в списке. Возвращается длина списка \fIlist\fP. .P \fBllistxattr\fP() идентичен \fBlistxattr\fP(), за исключением случая с символьной ссылкой, где возвращается список названий расширенных атрибутов, связанных с самой ссылкой, а не с файлом, на который она ссылается. .P \fBflistxattr\fP() идентичен \fBlistxattr\fP(), отличием является то, что используется открытый файл, на который указывает \fIfd\fP (возвращаемом \fBopen\fP(2)), а не указанный в \fIpath\fP. .P Одиночный расширенный атрибут \fIname\fP является строкой, заканчивающейся null. Имя включает префикс пространства имен; их может быть несколько, разрозненные пространства связаны с отдельной записью inode. .P Если \fIsize\fP равно нулю, то эти вызовы возвращают текущий размер списка имён расширенных атрибутов (и не изменяют \fIlist\fP). Это можно использовать для определения размера буфера, который будет указан в последующем вызове (но учтите, есть вероятность, что набор расширенных атрибутов может измениться между двумя вызовами, поэтому всё равно нужно проверять возвращаемое состояние после второго вызова). .SS Пример The \fIlist\fP of names is returned as an unordered array of null\-terminated character strings (attribute names are separated by null bytes (\[aq]\e0\[aq])), like this: .P .in +4n .EX user.name1\e0system.name1\e0user.name2\e0 .EE .in .P Файловые системы, реализующие ACL стандарта POSIX с помощью расширенных атрибутов, могут возвращать такой \fIсписок\fP: .P .in +4n .EX system.posix_acl_access\e0system.posix_acl_default\e0 .EE .in .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, a nonnegative number is returned indicating the size of the extended attribute name list. On failure, \-1 is returned and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBE2BIG\fP Размер списка имён расширенных атрибутов превышает максимально допустимый; список невозможно получить. Это может случиться в файловых системах, которые поддерживают бесконечное количество расширенных атрибутов на файл, например XFS. Смотрите ДЕФЕКТЫ. .TP \fBENOTSUP\fP Расширенные атрибуты не поддерживаются файловой системой или отключены. .TP \fBERANGE\fP Размер \fIsize\fP буфера \fIlist\fP слишком мал для хранения результата. .P Также могут возникать ошибки, описанные в \fBstat\fP(2). .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ .\" .SH AUTHORS .\" Andreas Gruenbacher, .\" .RI < a.gruenbacher@computer.org > .\" and the SGI XFS development team, .\" .RI < linux-xfs@oss.sgi.com >. .\" Please send any bug reports or comments to these addresses. Linux 2.4, glibc 2.3. .SH ОШИБКИ .\" The xattr(7) page refers to this text: Как упоминалось в \fBxattr\fP(7), в VFS есть ограничение в 64\ КБ на размер списка имён расширенных атрибутов, возвращаемый \fBlistxattr\fP(). Если полный размер имён атрибутов, прикреплённых к файлу, превышает это ограничение, то становится невозможно получить список имён атрибутов. .SH ПРИМЕРЫ В следующей программе показано использование \fBlistxattr\fP() и \fBgetxattr\fP(2). Для файла, чьё имя указывается параметром в командной строке, выводится список файловых атрибутов и их значения. .P Для упрощения кода при выполнении программы ключи атрибутов и значения считаются константами. В реальной программе нужно учитывать и обрабатывать изменения при выполнении программы. Например, количество байт, необходимое для ключей атрибутов, может увеличиваться между двумя вызовами \fBlistxattr\fP(). В приложении нужно предусмотреть эту возможность с помощью цикла, который повторяет вызов (возможно, ввести задаваемое максимальное количество попыток) с большим буфером каждый раз при ошибке \fBERANGE\fP. Вызовы \fBgetxattr\fP(2) могут обрабатываться схожим образом. .P В следующем выводе был создан файл, заданы некоторые расширенные файловые атрибуты и показан вывод атрибутов с помощью программы\-примера. .SS "Пример вывода" .in +4n .EX $ \fBtouch /tmp/foo\fP $ \fBsetfattr \-n user.fred \-v chocolate /tmp/foo\fP $ \fBsetfattr \-n user.frieda \-v bar /tmp/foo\fP $ \fBsetfattr \-n user.empty /tmp/foo\fP $ \fB./listxattr /tmp/foo\fP user.fred: chocolate user.frieda: bar user.empty: <нет значения> .EE .in .SS "Исходный код программы (listxattr.c)" .\" SRC BEGIN (listxattr.c) .EX #include #include #include #include \& int main(int argc, char *argv[]) { char *buf, *key, *val; ssize_t buflen, keylen, vallen; \& if (argc != 2) { fprintf(stderr, "Usage: %s path\en", argv[0]); exit(EXIT_FAILURE); } \& /* * Determine the length of the buffer needed. */ buflen = listxattr(argv[1], NULL, 0); if (buflen == \-1) { perror("listxattr"); exit(EXIT_FAILURE); } if (buflen == 0) { printf("%s has no attributes.\en", argv[1]); exit(EXIT_SUCCESS); } \& /* * Allocate the buffer. */ buf = malloc(buflen); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } \& /* * Copy the list of attribute keys to the buffer. */ buflen = listxattr(argv[1], buf, buflen); if (buflen == \-1) { perror("listxattr"); exit(EXIT_FAILURE); } \& /* * Loop over the list of zero terminated strings with the * attribute keys. Use the remaining buffer length to determine * the end of the list. */ key = buf; while (buflen > 0) { \& /* * Output attribute key. */ printf("%s: ", key); \& /* * Determine length of the value. */ vallen = getxattr(argv[1], key, NULL, 0); if (vallen == \-1) perror("getxattr"); \& if (vallen > 0) { \& /* * Allocate value buffer. * One extra byte is needed to append 0x00. */ val = malloc(vallen + 1); if (val == NULL) { perror("malloc"); exit(EXIT_FAILURE); } \& /* * Copy value to buffer. */ vallen = getxattr(argv[1], key, val, vallen); if (vallen == \-1) { perror("getxattr"); } else { /* * Output attribute value. */ val[vallen] = 0; printf("%s", val); } \& free(val); } else if (vallen == 0) { printf(""); } \& printf("\en"); \& /* * Forward to next attribute key. */ keylen = strlen(key) + 1; buflen \-= keylen; key += keylen; } \& free(buf); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" \fBgetfattr\fP(1), \fBsetfattr\fP(1), \fBgetxattr\fP(2), \fBopen\fP(2), \fBremovexattr\fP(2), \fBsetxattr\fP(2), \fBstat\fP(2), \fBsymlink\fP(7), \fBxattr\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал Azamat Hackimov , Dmitriy S. Seregin , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .