GETXATTR(2)

ИМЯ
getxattr, lgetxattr, fgetxattr - получить расширенное значение атрибута

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

ssize_t getxattr(const char *path, const char *name,
                 void *value, size_t size);
ssize_t lgetxattr(const char *path, const char *name,
                 void *value, size_t size);
ssize_t fgetxattr(int fd, const char *name,
                 void *value, size_t size);

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

getxattr() возвращает значение value расширенного атрибута с именем name и связанного с указанным путем path в файловой системе. Возвращается длина атрибута value.

lgetxattr() идентичен getxattr(), за исключением указания символьной ссылки, когда рассматривается именно ссылка, а не файл, на который она указывает.

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

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

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

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

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

Если атрибут с таким именем не существует или если процесс не имеет прав доступа к этому атрибуту, то errno присваивается значение ENOATTR.

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

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

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

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

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

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