Утилита setxattr#

Утилита setxattr используется для установки значений расширенных атрибутов.

Расширенные атрибуты - это пары «name:value» («имя:значение»), связанные с индексными дескрипторами - файлами, каталогами, символьными ссылками и т.д. Они являются расширениями обычных атрибутов, связанных со всеми индексными дескрипторами в системе.

setxattr устанавливает значение расширенного атрибута, идентифицируемого по имени и связанного с заданным путем в файловой системе.

Синтаксис:

#include <sys/xattr.h>

int setxattr(const char *path, const char *name, const void value[.size], size_t size, int flags);

Где:

  • #include <sys/xattr.h> - включение заголовочного файла, содержащего определения функций и констант, используемых для работы с расширенными атрибутами файлов в системе;

  • int - целочисленный тип данных;

  • const char *path - путь к файлу/каталогу;

  • const char *name - имя расширенного атрибута;

  • const void value[.size] - значение расширенного атрибута;

  • size_t size - размер значения расширенного атрибута в байтах, может быть равен 0;

  • flags - флаги.

Имя расширенного атрибута - это строка, заканчивающаяся нулем и содержащая префикс namespace. С отдельным индексным дескриптором может быть связано несколько непересекающихся namespaces.

Значением расширенного атрибута является фрагмент произвольных текстовых или бинарных данных заданной длины.

По умолчанию - значение flags равно 0 - расширенный атрибут будет создан, если он не существует, или значение будет заменено, если атрибут уже существует. Также в поле flags можно указать значения:

  • XATTR_CREATE - создать атрибут; выдать ошибку, если он уже существует;

  • XATTR_REPLACE - заменить атрибут; выдать ошибку, если он еще не существует.

Варианты возвращаемых значений:

  • 0 - успешное выполнение;

  • -1 - неуспешное выполнение;

  • errno - ошибка.