CHFLAGS(2) | System Calls Manual | CHFLAGS(2) |
chflags
, lchflags
,
fchflags
, chflagsat
—
set file flags
Standard C Library (libc, -lc)
#include
<sys/stat.h>
#include <unistd.h>
int
chflags
(const
char *path, unsigned long
flags);
int
lchflags
(const
char *path, unsigned long
flags);
int
fchflags
(int
fd, unsigned long
flags);
int
chflagsat
(int
fd, const char
*path, unsigned long
flags, int
atflag);
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
chflagsat
()
is equivalent to either
chflags
()
or lchflags
() depending on the
atflag except in the case where
path specifies a relative path. In this case the file
to be changed is determined relative to the directory associated with the
file descriptor fd instead of the current working
directory. The values for the atflag are constructed
by a bitwise-inclusive OR of flags from the following list, defined in
<fcntl.h>
:
AT_SYMLINK_NOFOLLOW
If
chflagsat
()
is passed the special value AT_FDCWD
in the
fd parameter, the current working directory is used.
If also atflag is zero, the behavior is identical to a
call to
chflags
().
The flags specified are formed by or'ing the following values
SF_APPEND
SF_ARCHIVED
SF_IMMUTABLE
SF_NOUNLINK
SF_SNAPSHOT
UF_APPEND
UF_ARCHIVE
UF_HIDDEN
UF_IMMUTABLE
UF_NODUMP
UF_NOUNLINK
UF_OFFLINE
UF_OPAQUE
UF_READONLY
UF_REPARSE
UF_SPARSE
UF_SYSTEM
If one of SF_IMMUTABLE
,
SF_APPEND
, or SF_NOUNLINK
is
set a non-super-user cannot change any flags and even the super-user can
change flags only if securelevel is 0. (See init(8) for
details.)
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 to toggle these flags by non-super-users are rejected.
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.)
The implementation of all flags is filesystem-dependent. See the
description of the UF_ARCHIVE
flag above for one
example of the differences in behavior. Care should be exercised when
writing applications to account for support or lack of support of these
flags in various filesystems.
The SF_SNAPSHOT
flag is maintained by the
system and cannot be toggled.
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
The chflags
() system call will fail
if:
ENOTDIR
]ENAMETOOLONG
]ENOENT
]EACCES
]ELOOP
]EPERM
]EPERM
]SF_IMMUTABLE
,
SF_APPEND
, or SF_NOUNLINK
is set and the user is either not the super-user or securelevel is greater
than 0.EPERM
]SF_ARCHIVED
, SF_IMMUTABLE
,
SF_APPEND
, or
SF_NOUNLINK
.EPERM
]SF_SNAPSHOT
flag.EROFS
]EFAULT
]EIO
]EINTEGRITY
]EOPNOTSUPP
]The fchflags
() system call will fail
if:
EBADF
]EINVAL
]EPERM
]EPERM
]SF_IMMUTABLE
,
SF_APPEND
, or SF_NOUNLINK
is set and the user is either not the super-user or securelevel is greater
than 0.EPERM
]SF_ARCHIVED
, SF_IMMUTABLE
,
SF_APPEND
, or
SF_NOUNLINK
.EPERM
]SF_SNAPSHOT
flag.EROFS
]EIO
]EINTEGRITY
]EOPNOTSUPP
]chflags(1), fflagstostr(3), strtofflags(3), init(8), mount_unionfs(8)
The chflags
() and
fchflags
() system calls first appeared in
4.4BSD. The lchflags
()
system call first appeared in FreeBSD 5.0. The
chflagsat
() system call first appeared in
FreeBSD 10.0.
March 30, 2020 | Debian |