May 2, 1995 CHFLAGS 2

### NAME

chflags, lchflags, fchflags - set file flags

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```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. 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) 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), init(8), mount_union(8)

### HISTORY

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