Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595351
  • 博文数量: 109
  • 博客积分: 1463
  • 博客等级: 上尉
  • 技术积分: 859
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-22 13:21
个人简介

希望和广大热爱技术的童鞋一起交流,成长。

文章分类

全部博文(109)

文章存档

2017年(1)

2016年(2)

2015年(18)

2014年(1)

2013年(9)

2012年(15)

2011年(63)

分类: LINUX

2011-08-11 10:33:14

名称:

umask

目标:

为进程文件方式创建屏蔽字

头文件:

#include < sys/types.h>

#include

函数原形:

mode_t umask(mode_t cmask);

参数:

cmask

返回值:

以前的文件方式创建屏蔽字

umask函数为进程设置文件方式创建屏蔽字,并返回以前的值。其中,参数cmask由下面9个常数逐为与构成。

       S_IRUSR              用户-

       S_IWUSR             用户-

       S_IXUSR              用户-执行

       S_IRGRP              -

       S_IWGRP             -

       S_IXGRP              -执行

       S_IROTH              其他-

       S_IWOTH             其他-

       S_IXOTH              其他-执行

在进程创建一个新文件或新目录时,就一定会使用文件方式创建屏蔽字。

下面是一个例子程序2_9.c创建两个文件,创建第一个时,umask值为0,创建第二个时,umask值禁止所有组和其他存取许可权。若运行此程序可得如下结果,从中可见存取许可权是如何设置的。

/*2_9.c*/

#include

#include

#include

#include

 

int main(int argc,char *argv[])

{

umask(0);

if(creat(argv[1],S_IRUST|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)<0)

    perror(“ERROR”);

umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);

if(creat(argv[2],S_IRUST|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)<0)

    perror(“ERROR”);

exit(0);

}

下面是执行:

#gcc –o 2_9 2_9.c

#./2_9 test1 test2

#ls –l test1 test2

-rw-rw-rw-    1 root    root          0  sep 24 22:26 test1

-rw-------     1 root    root           0  sep 24 22:26 test2

我们可以看到第二个文件的组成员和其他人的读写权限被屏蔽了。

 

14

名称:

chmod/fchmod

目标:

修改文件的所有权限和特殊属性。

头文件:

#include < sys/types.h>

#include

函数原形:

int chmod(const char *path,mode_t  mode);

int fchmod(in fildes,mode_t mode);

参数:

path     文件名

mode    新的所有权和特殊属性。

fildes    文件描述符

返回值:

-1       遇到错误

    

0        成功返回

       chmod函数在指定的文件上进行操作,而fchmod函数则对已打开的文件进行操作。

为了改变一个文件的许可权位,进程的有效用户ID必须等于文件的所有者,或者该进程必须具有超级用户许可权。

程序可以通过系统调用chmod来改变文件的所有权和特殊属性,如:

chmod(“/tmp/myfie”,04764);

chmod(“/tmp/myfie”,S_ISUID|S_IRWXU|S_IRGRP|S_IWGRP|S_IROTH);

上述两条指令的作用相同,第一条是八进制来表示,第二条是用中定义的符号来表示。后者有明显的优点,当系统定义的许可位的值改变时,无需修改程序。

Chmod函数的mode常数如下:

宏表示                  八进制表示           含义

S_ISUID                      04000            执行时设置用户id

S_ISGID                      02000            执行时设置组id

S_ISVTX                     01000            保存正文

 

S_IRWXU                    00700            用户(所有者)读、写和执行

       S_IRUSR              00400            用户(所有者)读

       S_IWUSR             00200            用户(所有者)写

       S_IXUSR              00100            用户(所有者)执行

 

S_IRWXG                    00070            组读、写和执行

       S_IRGRP              00040            组读

       S_IWGRP             00020            组写

       S_IXGRP              00010            组执行

 

S_IRWXO                    00007            其他读、写和执行

       S_IROTH              00004            其他读

       S_IWOTH             00002            其他写

       S_IXOTH              00001            其他执行

 

八、文件所有者和组

15

名称:

chown/fchown/lchown

目标:

修改文件所有者和组

头文件:

#include

#include < 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);

参数:

path     文件名

fp       文件描述符

owner    新的文件所有者ID

group    新的组ID

返回值:

-1       遇到错误

    

0        成功返回

chown通过修改文件属性来修改文件所有者和组的ID。例如:

chown(“file1“,20040)

将文件file1的用户ID改为200,组ID改为40

阅读(656) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~