int
chown(
const char *path
, uid_t owner
, gid_t group
)
int
lchown(
const char *path
, uid_t owner
, gid_t group
)
int
fchown(
int fd
, uid_t owner
, gid_t group
)
path
or referenced by
fd
is changed as specified by the arguments
owner
and
group
.
The owner of a file may change the
group
to a group of which
he or she is a member,
but the change
owner
capability is restricted to the super-user.
When called to change the owner of a file,
chown(),
lchown(
)
and
fchown(
)
clear the set-user-id
(
S_ISUID
)
bit on the file.
When a called to change the group of a file,
chown(),
lchown(
)
and
fchown(
)
clear the set-group-id
(
S_ISGID
)
bit on the file.
These actions are taken to prevent accidental or mischievous creation of
set-user-id and set-group-id programs.
lchown()
is like
chown(
)
except in the case where the named file is a symbolic link,
in which case
lchown(
)
changes the owner and group of the link,
while
chown(
)
changes the owner and group of the file the link references.
fchown()
is particularly useful when used in conjunction
with the file locking primitives (see
flock(2)).
One of the owner or group id's may be left unchanged by specifying it as (uid_t)-1 or (gid_t)-1 respectively.
)
and
lchown(
)
will fail and the file will be unchanged if:
ENOTDIR
]
ENAMETOOLONG
]
{NAME_MAX}
characters, or an entire path name exceeded
{PATH_MAX}
characters.
ENOENT
]
EACCES
]
ELOOP
]
EPERM
]
EROFS
]
EFAULT
]
path
points outside the process's allocated address space.
EIO
]
fchown()
will fail if:
EBADF
]
fd
does not refer to a valid descriptor.
EINVAL
]
fd
refers to a socket, not a file.
EPERM
]
EROFS
]
EIO
]
)
function deviates from the semantics defined in
ISO/IEC 9945-1:1990 (``POSIX.1'') ,
which specifies that, unless the caller is the super-user, both the
set-user-id and set-group-id bits on a file shall be cleared, regardless
of the file attribute changed.
The
lchown(
)
and
fchown(
)
functions, as defined by
X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') ,
provide the same semantics.
To retain conformance to these standards, compatibility interfaces are provided by the POSIX Compatibility Library (libposix, -lposix) as follows:
)
function conforms to
ISO/IEC 9945-1:1990 (``POSIX.1'')
and
X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') .
)
and
fchown(
)
functions conform to
X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') .
)
function call appeared in
4.2BSD.
The
chown()
and
fchown(
)
functions were changed to follow symbolic links in
4.4BSD.
The
lchown(
)
function call appeared in
NetBSD1.3.