GETXATTR(2) | Руководство программиста Linux | GETXATTR(2) |
getxattr, lgetxattr, fgetxattr - получить расширенное значение атрибута
#include <sys/types.h> #include <sys/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)). Полное описание модели расширенных атрибутов можно найти в xattr(7).
getxattr() возвращает значение расширенного атрибута с именем name и связанного с указанным путем path в файловой системе. Значение атрибута помещается в буфер, указанный в value; в size задаётся размер этого буфера. В качестве возвращаемого значения вызова возвращается количество байт, помещённых в value.
lgetxattr() идентичен getxattr(), за исключением указания символьной ссылки, когда рассматривается именно ссылка, а не файл, на который она указывает.
fgetxattr() идентичен getxattr(), только вместо path берётся открытый файл, на который указывает fd (возвращаемый open(2)).
Расширенный атрибут name является строкой, заканчивающейся null. Имя включает префикс пространства имён; их может быть несколько, разрозненные пространства связаны с разными записями inode. Значением расширенного атрибута является произвольный кусок текстовых или двоичных данных, который был назначен с помощью setxattr(2).
Если size равно нулю, то эти вызовы возвращают текущий размер указанного расширенного атрибута (и не изменяют value). Это можно использовать для определения размера буфера, который вместил бы всё значение, связанное с расширенным атрибутом (но учтите, есть вероятность, что значение атрибута может измениться между двумя вызовами, поэтому всё равно нужно проверять возвращаемое состояние после второго вызова).
При успешном выполнении эти вызовы возвращают неотрицательное число, обозначающее размер (в байтах) значения расширенного атрибута. При ошибке возвращается -1 и errno устанавливается в соответствующее значение.
Также могут возникать ошибки, описанные в stat(2).
Данные системные вызовы доступны в Linux начиная с ядра версии 2.4; поддержка в glibc появилась в версии 2.3.
Данные системные вызовы есть только в Linux.
Смотрите listxattr(2).
getfattr(1), setfattr(1), listxattr(2), open(2), removexattr(2), setxattr(2), stat(2), symlink(7), xattr(7)
2019-03-06 | Linux |