Scroll to navigation

SETXATTR(2) Руководство программиста Linux SETXATTR(2)

ИМЯ

setxattr, lsetxattr, fsetxattr - устанавливает расширенное значение атрибутов

СИНТАКСИС

#include <sys/types.h>
#include <sys/xattr.h>
int setxattr(const char *path, const char *name,
              const void *value, size_t size, int flags);
int lsetxattr(const char *path, const char *name,
              const void *value, size_t size, int flags);
int fsetxattr(int fd, const char *name,
              const void *value, size_t size, int flags);

ОПИСАНИЕ

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

Вызов setxattr() устанавливает значение value расширенного атрибута с именем, заданным в name и связанного с заданным path в файловой системе. В аргументе size задаётся размер (в байтах) value; допускается нулевой размер.

Вызов lsetxattr() идентичен setxattr(), за исключением случая работы с символьными ссылками; он устанавливает расширенный атрибут на ссылке, а не на том файле, на который она указывает.

Вызов fsetxattr() идентичен setxattr(), отличием является то, что расширенный атрибут устанавливается на открытом файле, на который указывает fd (возвращаемом open(2)), а не на указанном в path.

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

По умолчанию (т. е., значение flags равно), если расширенный атрибут отсутствует, то он создаётся, а если он существует, то заменяется его значение. Для изменения такой работы, в flags можно указать одно из следующих значений:

Выполнять только создание, если атрибут с таким именем существует — возвращать ошибку.
Выполнять только замену, если атрибут с таким именем не существует — возвращать ошибку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается ноль. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Предел по дисковой квоте; не хватает пространства для сохранения расширенного атрибута.
Указан XATTR_CREATE, но атрибут уже существует.
XATTR_REPLACE was specified, and the attribute does not exist. (ENOATTR is defined to be a synonym for ENODATA in <attr/xattr.h>.)
Не хватает пространства для сохранения расширенного атрибута.
Неверный префикс пространства имён name.
Расширенные атрибуты не поддерживаются файловой системой или отключены.
Файл помечен как неизменяемый (immutable) или только для добавления (смотрите ioctl_iflags(2)).

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

ВЕРСИИ

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

СООТВЕТСТВИЕ СТАНДАРТАМ

Данные системные вызовы есть только в Linux.

СМ. ТАКЖЕ

getfattr(1), setfattr(1), getxattr(2), listxattr(2), open(2), removexattr(2), stat(2), symlink(7), xattr(7)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

13 марта 2017 г. Linux