CHFLAGS(2) | System Calls Manual | CHFLAGS(2)

# 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, u_long 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. For `lchflags`(), symbolic links are not traversed and thus their modes may be changed with this call.

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_OPAQUE`
  The file (if a directory) is opaque for union mounts.
`SF_ARCHIVED`
  The file is archived.
`SF_IMMUTABLE`
  The file may not be changed.
`SF_APPEND`
  The file may only be appended to.

The `UF_NODUMP`, `UF_IMMUTABLE`, `UF_APPEND`, and `UF_OPAQUE` flags may be set or unset by either the owner of a file or the super-user, except on block and character devices, where only the super-user may set or unset them.

The `SF_ARCHIVED`, `SF_IMMUTABLE`, and `SF_APPEND` flags may only be set or unset by the super-user. 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) for details.)

# RETURN VALUES

Upon successful completion, a value of 0 is returned. Otherwise, -1 is returned and the global variable errno is set to indicate the error.

# ERRORS

`chflags`() will fail if:

[`ENOTDIR`]
  A component of the path prefix is not a directory.
[`ENAMETOOLONG`]
  A component of a pathname exceeded {`NAME_MAX`} characters, or an entire path name exceeded {`PATH_MAX`} 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, or the effective user ID is not the super-user and one or more of the super-user-only flags for the named file would be changed.
[`EOPNOTSUPP`]
  The named file resides on a file system that does not support file flags.
[`EROFS`]
  The named file resides on a read-only file system.
[`EFAULT`]
  path points outside the process's allocated address space.
[`EIO`]
  An I/O error occurred while reading from or writing to the file system.

`fchflags`() will fail if:

[`EBADF`]
  The descriptor is not valid.
[`EINVAL`]
  fd 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, or the effective user ID is not the super-user and one or more of the super-user-only flags for the file would be changed.
[`EOPNOTSUPP`]
  The file resides on a file system that does not support file flags.
[`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.

# SEE ALSO

chflags(1), stat(2), stat_flags(3), init(8), mount_union(8)

# HISTORY

The `chflags`() and `fchflags`() functions first appeared in 4.4BSD. The `lchflags`() function first appeared in NetBSD 1.5.

August 6, 2011 | NetBSD 9.2