unix环境高级编程-4.11-chown,fchown和lchown函数

简介: 接下来讲的函数主要是用来更改文件的用户ID和,组ID。[cpp] view plaincopy#include     int chown(const char* pa...

接下来讲的函数主要是用来更改文件的用户ID和,组ID。

  1. #include <unistd.h>  
  2.   
  3. int chown(const char* pathname,uid_t owner,gid_t group);  
  4.   
  5. int fchown(int filedes,uid_t owner,gid_t growp);  
  6.   
  7. int lchown(const char* pathname,uid_t owner,gid_t group);  

成功返回0,若出错则返回-1
查看GNU C手册

int chown (const char *filename, uid t owner, gid t group) [Function]
The chown function changes the owner of the file filename to owner, and its group
owner to group.

Changing the owner of the file on certain systems clears the set-user-ID and set-group-
ID permission bits. (This is because those bits may not be appropriate for the new
owner.) Other file permission bits are not changed.

The return value is 0 on success and -1 on failure. In addition to the usual file name
errors (see Section 11.2.3 [File Name Errors], page 224), the following errno error
conditions are defined for this function:
EPERM This process lacks permission to make the requested change.
Only privileged users or the file’s owner can change the file’s group. On
most file systems, only privileged users can change the file owner; some
file systems allow you to change the owner if you are currently the owner.
When you access a remote file system, the behavior you encounter is
determined by the system that actually holds the file, not by the system
your program is running on.
See Section 31.7 [Optional Features in File Support], page 771, for information
about the _POSIX_CHOWN_RESTRICTED macro.
EROFS The file is on a read-only file system.

 

int fchown (int filedes, int owner, int group) [Function]
This is like chown, except that it changes the owner of the open file with descriptor
filedes.
The return value from fchown is 0 on success and -1 on failure. The following errno
error codes are defined for this function:
EBADF The filedes argument is not a valid file descriptor.
EINVAL The filedes argument corresponds to a pipe or socket, not an ordinary
file.
EPERM This process lacks permission to make the requested change. For details
see chmod above.
EROFS The file resides on a read-only file system.

其实 ,我们可以看到,大多数函数失败了是返回小余0的数,而并完全是-1.所以,当你判断一个函数是否出错的时候记得使用(<0),而不是-1;

 

特别说明一下lchown是改变符号链接本身的所有者,而不是该符号链接所指向的文件。

如果两个参数owner,和group中的任一一个是-1,则对应的ID不变。

基于BSD的系统规定,只有超级用户才能更改一个文件的所有者。这样做的原因是泛指用户改变其文件的所有者从而百度哦磁盘空间限额对他们的限制。系统V则允许任一用户更改他们所拥有的文件的所有者。

 

若_POSIX_CHOWN_RESTRICTED对指定的文件起作用。

(1)只有超级用户进程能更改文件的用户ID

(2) 若满足下列条件,一个非超级用户进程就可以更改文件的组ID:

      (a)进程拥有此文件(其有效用户ID,等于该文件的用户ID)

       (b)参数owner等于-1或者文件用户ID,并且参数group等于进程的有效组ID或者进程的附加组id之一。

这意味这,当_POSIX_CHOWN_RESTRICTED起作用的时你不能更改其他用户的文件的用户id,你可以更改你所拥有的文件的组ID,但只能改到你所属的组。

如果这些函数由超级用户进程调用。则在成功返回的时候,该文件的设置用户ID位和设置组id,为都会被清除。

 

shell中使用chown的时候,格式如下

chown 属主 文件名

更多请访问:http://blog.csdn.net/wallwind

目录
相关文章
|
2月前
|
算法 Unix 数据安全/隐私保护
Python编程--UNIX口令破解机
Python编程--UNIX口令破解机
27 1
|
6月前
|
Unix
Unix环境高级编程(第三版)中apue.h头文件及其依赖安装教程
Unix环境高级编程(第三版)中apue.h头文件及其依赖安装教程
121 0
|
Unix Shell Python
unix高级编程-fork和execve
unix高级编程-fork和execve
64 0
|
Ubuntu Unix Shell
unix高级编程-fork之后父子进程共享文件
unix高级编程-fork之后父子进程共享文件
64 0
|
Unix Linux
unix高级编程-僵尸进程和孤儿进程
unix高级编程-僵尸进程和孤儿进程
62 0
|
Unix 网络协议
unix网络编程str_cli使用epoll实现
unix网络编程str_cli使用epoll实现 unix环境高级编程中也有这个函数,都是为了讲解IO多路转接。从本质上来看epoll就是一个改善了的select和poll,本质没发生任何变化,对于构建在poll,select和epoll上的框架使用者来说,没什么区别。
784 0
|
7月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
71 2
|
1天前
|
Unix Linux 编译器
UNIX/Linux 上的安装
UNIX/Linux 上的安装。
8 2
|
2月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。