ATTR\_REMOVE(3) XFS Compatibility API ATTR\_REMOVE(3)

# [NAME](#NAME)

attr\_remove, attr\_removef - remove a user attribute of a filesystem object

# [C SYNOPSIS](#C_SYNOPSIS)

```
#include <attr/attributes.h>

int attr_remove (const char *path, const char *attrname, int flags);
```

```
int attr_removef (int fd, const char *attrname, int flags);
```

# [DESCRIPTION](#DESCRIPTION)

The **attr\_remove** and **attr\_removef** functions provide a way to remove previously created attributes from filesystem objects.

*Path* points to a path name for a filesystem object, and *fd* refers to the file descriptor associated with a file. If the attribute *attrname* exists, the attribute name and value will be removed from the filesystem object. The *flags* argument can contain the following symbols bitwise OR'ed together:

ATTR\_ROOT

Look for *attrname* in the **root** address space, not in the **user** address space. (limited to use by super-user only)

ATTR\_DONTFOLLOW

Do not follow symbolic links when resolving a *path* on an **attr\_remove** function call. The default is to follow symbolic links.

**attr\_remove** will fail if one or more of the following are true:

\[ENOATTR]

The attribute name given is not associated with the indicated filesystem object.

\[ENOENT]

The named file does not exist.

\[EPERM]

The effective user ID does not match the owner of the file and the effective user ID is not super-user.

\[ENOTDIR]

A component of the path prefix is not a directory.

\[EACCES]

Search permission is denied on a component of the path prefix.

\[EINVAL]

A bit was set in the *flag* argument that is not defined for this system call.

\[EFAULT]

*Path* points outside the allocated address space of the process.

\[ELOOP]

A path name lookup involved too many symbolic links.

\[ENAMETOOLONG]

The length of *path* exceeds {*MAXPATHLEN*}, or a pathname component is longer than {*MAXNAMELEN*}.

**attr\_removef** will fail if:

\[ENOATTR]

The attribute name given is not associated with the indicated filesystem object.

\[EINVAL]

A bit was set in the *flag* argument that is not defined for this system call, or *fd* refers to a socket, not a file.

\[EFAULT]

*Attrname* points outside the allocated address space of the process.

\[EBADF]

*Fd* does not refer to a valid descriptor.

# [DIAGNOSTICS](#DIAGNOSTICS)

On success, zero is returned. On error, -1 is returned, and *errno* is set appropriately.

# [SEE ALSO](#SEE_ALSO)

[**attr**(1)](/man/os/attr/attr.1), [**attr\_get**(3)](/man/os/attr/attr_get.3), [**attr\_list**(3)](/man/os/attr/attr_list.3), [**attr\_multi**(3)](/man/os/attr/attr_multi.3), [**attr\_set**(3)](/man/os/attr/attr_set.3)

Extended Attributes Dec 2001

---

Document: attr_remove(3) from attr 2.6.0-r5 (Chainguard OS)
Source: https://git.savannah.nongnu.org/git/attr.git
