chown、fchown、lchown函数

 

 

说明:转载请注明出处


 

 

使用ls –l命令会给出文件的所有者和文件所有者所处的组。可以通过函数chownfchownlchown函数来修改文件所有者和文件所有者所属的组,具体如下表:

chownfchownlchown函数

 

头文件

<sys/types.h>

<unistd.h>

函数形式

int chown(const char *pathuid_t ownergid_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]#

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值