LISTXATTR(2)

ИМЯ
listxattr, llistxattr, flistxattr - выводит список названий расширенных атрибутов

ОБЗОР
#include <sys/types.h>
#include <attr/xattr.h>

ssize_t listxattr(const char *path, char *list, size_t size);
ssize_t llistxattr(const char *path, char *list, size_t size);
ssize_t flistxattr(int fd, char *list, size_t size);

ОПИСАНИЕ
Расширенные атрибуты представляют собой пару имя:значение и связываются с записями inode (файлы, каталоги, символьные ссылки и т.п.). Они являются расширениями к обычным атрибутам, связанным со всеми записями inode в системе (например, данные stat(2)). Полное описание модели расширенных атрибутов можно найти в attr(5).

listxattr() получает список list названий расширенных атрибутов, связанных с заданным путем path в файловой системе. Список представляет собой набор названий (заканчивающихся NULL) один за одним. Названия расширенных атрибутов, к которым вызывающий процесс не может иметь доступ, могут быть исключены из списка. Возвращается длина списка list.

llistxattr() идентичен listxattr(), за исключением случая с символьной ссылкой, где возвращается список названий расширенных атрибутов, связанных с самой ссылкой, а не с файлом, на который она ссылается.

flistxattr() идентичен listxattr(), отличием является то, что используется открытый файл, на который указывает fd (возвращаемом open(2)), а не указанный в path.

Одиночный расширенный атрибут name является просто строкой, заканчивающейся NULL. Имя включает префикс пространства имен; их может быть несколько, разрозненные пространства связаны с отдельной записью inode.

Для возврата текущего размера списка названий расширенных атрибутов этим вызовам может быть передан пустой буфер с нулевым размером size, что может быть использовано для определения размера буфера, который существенно больше, так как должен содержать список расширенных атрибутов.

  Пример
Список названий возвращается в виде неупорядоченного массива символьных строк, заканчивающихся null (названия атрибутов разделяются байтами null ('\0')), например:
    user.name1\0system.name1\0user.name2\0

Файловые системы ext2, ext3 и XFS, реализующие ACL стандарта POSIX с помощью расширенных атрибутов, могут возвращать такой список:
    system.posix_acl_access\0system.posix_acl_default\0

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном завершении работы возвращается положительное число, обозначающее размер списка названий расширенных атрибутов. При ошибках возвращается -1 и errno устанавливается в соответствующее значение.

Если размер size буфера list слишком мал для хранения результата, то errno присваивается значение ERANGE.

Если расширенные атрибуты не поддерживаются файловой системой или отключены, то errno присваивается значение ENOTSUP.

Ошибки системного вызова stat(2) также применимы и тут.

ВЕРСИИ
Данные системные вызовы доступны в Linux начиная с ядра версии 2.4; поддержка в glibc появилась в версии 2.3.

СООТВЕТСТВИЕ СТАНДАРТАМ
Данные системные вызовы есть только в Linux.

СМОТРИТЕ ТАКЖЕ
getfattr(1), setfattr(1), getxattr(2), open(2), removexattr(2), setxattr(2), stat(2), attr(5), symlink(7)