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

来源:互联网 发布:无间道歌词含义 知乎 编辑:程序博客网 时间:2024/05/30 04:31

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

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 总留鼻涕水怎么办 流像水一样的鼻涕怎么办 出门忘记带洗面奶怎么办 一侧鼻子流清水怎么办 慢性肠胃炎犯了怎么办 儿子拉肚肚子疼怎么办 皮肤太容易过敏怎么办 过敏脸一直不好怎么办 脸上突然过敏怎么办急救 脸过敏发红疼怎么办 脸上突然过敏了怎么办 脸过敏总反复怎么办 用蜂蜜洗脸过敏怎么办 脸上涂蜂蜜过敏怎么办 孕晚期脸过敏怎么办 吃芒果脸过敏怎么办 脸上老反复过敏怎么办 用什么都过敏怎么办 脸上起过敏湿疹怎么办 脸上发湿疹过敏怎么办 感冒流鼻涕有痰怎么办 咳嗽流清水鼻涕怎么办 脸最近老是过敏怎么办 鼻炎脸特别疼怎么办 宝宝感冒一直流鼻涕怎么办 经常过敏的体质怎么办 一边鼻子堵了怎么办 鼻炎流清水鼻涕怎么办 鼻子总感觉堵塞怎么办 半边鼻子不通气怎么办 鼻炎感冒了鼻塞怎么办 左边鼻子不通气怎么办 婴儿鼻塞不通气怎么办 过敏性鼻炎一直打喷嚏怎么办 一只鼻子流鼻涕怎么办 一个鼻子不通气怎么办 夏天鼻子堵了怎么办 做完鼻子感冒了怎么办 鼻子不通流鼻涕打喷嚏怎么办 一岁半宝宝流鼻涕鼻塞怎么办 没有感昌流鼻涕怎么办