说明:转载请注明出处
使用ls –l命令会给出文件的所有者和文件所有者所处的组。可以通过函数chown、fchown和lchown函数来修改文件所有者和文件所有者所属的组,具体如下表:
chown、fchown和lchown函数
头文件 | <sys/types.h> <unistd.h> | ||
函数形式 | int chown(const char *path,uid_t owner,gid_t group) int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *path,uid_t owner, gid_t group); | ||
返回值 | 成功 | 失败 | 是否设置errno |
0 | -1 | 是 |
说明:这3个函数都用于改变文件所有者和文件所有者所在的组。当然,修改文件所有权限的进程必须具有相应的权限(对应Linux系统而言,进程需要具有CAP_CHOWN能力)。
chown函数出错信息:
EACCES:给出的文件所处路径没有访问权限。
EFAULT:路径指向的文件地址错误。
ELOOP:给出的文件所在路径中符号链接过多。
ENAMETOOLONG:路径过长。
ENOENT:文件不存在。
ENOMEM:内核内存空间不足。
ENOTDIR:给出的文件所处路径中含有不是目录的部分。
EPERM:有效用户ID与文件拥有者不同,进程无权访问修改文件所有者。
EROFS:文件位于只读文件系统。
fchown函数出错信息:
EBADF:非法的文件描述符。
EIO:发生I/O错误。
ENOENT:文件不存在。
EPERM:有效用户ID与文件拥有者不同,进程无权访问修改文件。
EROFS:文件位于只读文件系统。
实例:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
if ( argc != 2 )
{
printf("Usage: %s filename\n", argv[0]);
return (1);
}
if ( chown(argv[1], 0, 0) < 0 )
{
perror("Cannot change the owner!");
return (1);
}
return (0);
}
运行结果:
[root@localhost test]# ll chdir
-r--r--r-x 1 bin bin7778 Apr 30 01:43 chdir
[root@localhost test]# ./chown chdir
[root@localhost test]# ll chdir
-r--r--r-x 1 root root 7778 Apr 30 01:43 chdir
[root@localhost test]#