UNIX环境高级编程读书笔记(二)—目录和文件 (4)

13

名称:

umask

目标:

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

头文件:

#include < sys/types.h>

#include <sys/stat.h>

函数原形:

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 <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <stdio.h>

 

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 <sys/stat.h>

函数原形:

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

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

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 <sys/types.h>

#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

 

文章转自:http://blog.chinaunix.net/u1/59291/showart.php?id=538548

你可能感兴趣的:(编程,unix,File,读书,Path,FP)