文件所有者皆可改变文件组 , 但所有者必须是参数 group 组的成员 . 当 root 用 chown() 改变文件
所有者或组时 , 该文件若具有 S_ISUID 或 S_ISGID 权限 , 则会清除此权限位 , 此外如果具有
S_ISGID 权限但不具 S_IXGRP 位 , 则该文件会被强制锁定 , 文件模式会保留 . 成功则返回 0, 失
败返回 -1, 错误原因存于 errno. 错误代码同 chmod().
chroot: 改变根目录
头文件 : unistd.h
函数定义 : int chroot(const char *path);
说明 : chroot() 用来改变根目录为参数 path 所指定的目录 . 只有超级用户才允许改变根目录 , 子
进程将继承新的根目录 . 调用成功则返回 0, 失败则返 -1, 错误代码存于 errno.
错误代码 :
EPERM 权限不足 , 无法改变根目录
EFAULT 参数 path 指针超出可存取内存空间
ENAMETOOLONG 参数 path 太长
ENOTDIR 路径中的目录存在但却非真正的目录
EACCESS 存取目录时被拒绝
ENOMEM 核心内存不足
ELOOP 参数 path 有过多符号连接问题
EIO I/O 存取错误
应用举例 :
#include <stdio.h>
#include <unistd.h>
int main(void)
{
/* 将根目录改为 /tmp , 并将工作目录切换至 /tmp */
chroot("/tmp");
chdir("/");
return 0;
}
closedir: 关闭目录
头文件 : sys/types.h dirent.h
函数定义 : int closedir(DIR *dir);
说明 : closedir() 关闭参数 dir 所指的目录流 . 关闭成功则返回 0, 失败返回 -1, 错误原因存于 errno
中. EBADF 参数 dir 为无效的目录流 .
fchdir: 改变当前的工作目录
头文件 : unistd.h
函数定义 : int fchdir(int fd);
说明 : fchdir() 用来将当前的工作目录改变成以参数 fd 所指的文件描述词 . 执行成功则返回 0, 失
败返回 -1, errno 为错误代码 .
fchmod: 改变文件的权限
头文件 : sys/types.h sys/stat.h
函数定义 : int fdmod(int fildes, mode_t mode);