---
name: "fchflags"
section: "2"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/fchflags"
---

# fchflags(2)

set file flags

## NAME

**chflags**, **lchflags**, **fchflags** – set file flags

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/stat.h\>**

**#include \<unistd.h\>**

*int*\

**chflags**(*const char \*path*, *u\_long flags*);

*int*\

**lchflags**(*const char \*path*, *int flags*);

*int*\

**fchflags**(*int fd*, *u\_long flags*);

## DESCRIPTION

The file whose name is given by *path* or referenced by the descriptor *fd* has its flags changed to *flags*.

The **lchflags**() system call is like **chflags**() except in the case where the named file is a symbolic link, in which case **lchflags**() will change the flags of the link itself, rather than the file it points to.

The flags specified are formed by *or*'ing the following values

- UF\_NODUMP

  Do not dump the file.

- UF\_IMMUTABLE

  The file may not be changed.

- UF\_APPEND

  The file may only be appended to.

- UF\_NOUNLINK

  The file may not be renamed or deleted.

- UF\_OPAQUE

  The directory is opaque when viewed through a union stack.

- SF\_ARCHIVED

  The file may be archived.

- SF\_IMMUTABLE

  The file may not be changed.

- SF\_APPEND

  The file may only be appended to.

- SF\_NOUNLINK

  The file may not be renamed or deleted.

The “UF\_IMMUTABLE”, “UF\_APPEND”, “UF\_NOUNLINK”, “UF\_NODUMP”, and “UF\_OPAQUE” flags may be set or unset by either the owner of a file or the super-user.

The “SF\_IMMUTABLE”, “SF\_APPEND”, “SF\_NOUNLINK”, and “SF\_ARCHIVED” flags may only be set or unset by the super-user. Attempts by the non-super-user to set the super-user only flags are silently ignored. These flags may be set at any time, but normally may only be unset when the system is in single-user mode. (See [init(8)](/init/8.md) for details.)

## RETURN VALUES

The **chflags()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **chflags**() system call will fail if:

- \[ENOTDIR\]

  A component of the path prefix is not a directory.

- \[ENAMETOOLONG\]

  A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.

- \[ENOENT\]

  The named file does not exist.

- \[EACCES\]

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

- \[ELOOP\]

  Too many symbolic links were encountered in translating the pathname.

- \[EPERM\]

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

- \[EROFS\]

  The named file resides on a read-only file system.

- \[EFAULT\]

  The *path* argument points outside the process's allocated address space.

- \[EIO\]

  An I/O error occurred while reading from or writing to the file system.

- \[EOPNOTSUPP\]

  The underlying file system does not support file flags.

The **fchflags**() system call will fail if:

- \[EBADF\]

  The descriptor is not valid.

- \[EINVAL\]

  The *fd* argument refers to a socket, not to a file.

- \[EPERM\]

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

- \[EROFS\]

  The file resides on a read-only file system.

- \[EIO\]

  An I/O error occurred while reading from or writing to the file system.

- \[EOPNOTSUPP\]

  The underlying file system does not support file flags.

## SEE ALSO

[chflags(1)](/chflags/1.md), [fflagstostr(3)](/fflagstostr/3.md), [strtofflags(3)](/strtofflags/3.md), [init(8)](/init/8.md), [mount\_unionfs(8)](/mount_unionfs/8.md)

## HISTORY

The **chflags**() and **fchflags**() system calls first appeared in 4.4BSD.
