下面介绍对stat结构的各个成员的操作函数。

先贴个stat结构的图:

access函数:

#include <unistd.h>

int access(const char *pathname, int mode);

其中,mode是表中的按位或。

返回值:若成功返回0,若出错返回-1

当进程对一个文件进行某种操作(读或写或执行)时,内核会以进程的有效用户ID和有效组ID为基础执行其访问权限测试。有时,进程也希望按其实际用户ID和实际组ID来测试其访问能力。例如当一个进程有使用设置用户ID或设置组ID时(通常此时有效用户ID并不等于实际用户ID),就可能会有这种需要。access函数是按实际用户ID和实际组ID来进行访问权限测试的。

该测试分为四步:

1.先看是不是超级用户,是的话就允许访问,不用看接下来的3步了。

2.若进程的实际用户等于文件的所有者ID(也就是进程拥有该文件),那么就会按设置好的访问权限来访问。

3.如果不符合2的话,那就看组,看是不是组的所有者。

4.都不是的话那就依照other的访问权限来访问了。

总接下来就是先看是否超级用户,再分别看user,group和other的访问权限。

umask函数: 

#include <sys/stat.h>

mode_t umask(mode_t cmask);

返回值:以前的文件模式创建屏蔽字

umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。

在使用open和creat函数来创建一个新文件时,这两个函数都有一个参数mode,它指定了新文件的访问权限位。用umask可以屏蔽掉相应的权限。下面给个例子:

首先umask(0)代表什么都不屏蔽。然后创建foo文件的权限是rw-rw-rw-。然后屏蔽掉组的读(S_IRGRP)和组的写(S_IWGRP)和其他的读(S_IROTH)和写(S_IWOTH)。然后当创建bar文件的时候,虽然指定了rw-rw-rw的权限,但是由于组的读写和其他的都写权限都被屏蔽掉了,所以不能显示。结果如下:

除了向上述那样用宏来指定屏蔽字以外,还可以用向对应的数字。

chmod和fchmod函数:

#include <sys/stat.h>

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

int fchmod(int fiedes, mode_t mode);

两个函数返回值:若成功返回0,出错返回-1

这两个函数使我们可以更改现有文件的访问权限。chmod函数在指定的文件上进行操作,而fchmod函数则对已打开的文件进行操作。

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

参数mode是下图所示常量的或运算构成的。

chown,fchown和lchown函数:

下面的几个函数可用于更改文件的用户ID和组ID。

#include <unistd.h>

int chown(const char *pathname, uid_t owner, gid_t group);

int fchown(int filedes, uid_t owner, gid_t group);

int lchown(const char *pathname, uid_t owner, gid_t group);

三个函数的返回值:成功返回0,出错返回-1

如果在符号链接的情况下,lchown更改的是链接本身的所有者,而不是符号链接所指向的文件。

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

在linux下,能改的文件只有超级用户和进程的有效ID等于文件的所有者。

文件长度:

stat结构成员st_size表示以字节为单位的文件长度。此字段只对普通文件、目录文件和符号链接有意义。

对于符号链接,文件长度是文件名中的实际字节数。(不包括'\0')

文件截短:

有两个函数可以实现。

#include <unistd.h>

int truncate(const char *pathname, off_t length);

int ftruncate(int filedes, off_t length);

两个函数的返回值:成功返回0,出错返回-1

第四篇笔记待续。

《APUE》第四章笔记(2)的更多相关文章

  1. 《APUE》第四章笔记(1)

    1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...

  2. apue第四章学习总结

    apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...

  3. #Python编程从入门到实践#第四章笔记

    #Python编程从入门到实践#第四章笔记   操作列表 ​​​1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...

  4. C#语言和SQL Server第十三 十四章笔记

    十三章  使用ADO.NET访问数据库 十四章使用ADO.NET查询和操作数据库 十三章:                                                       ...

  5. 《HALCON数字图像处理》第四章笔记

    目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...

  6. linux第四章笔记

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. 最大限度利用处理器时间的原则:只要有可以执行 ...

  7. 《APUE》第四章笔记(4)

    这算是在博客园写的第一篇文章啊,之前都在csdn写(虽然才写了几篇,因为开通也没多少天..),还是稍微期待下吧.我写博客的主要意图是一来能够记录下来自己所学过的东西,二来也想能够跟大家交流,能够得到更 ...

  8. 《APUE》第四章笔记(3)

    文件系统 首先我们应该知道一个磁盘可以划分为多个分区,而每个分区就可以包含一个文件系统.UNIX的文件系统是这样的: 而我们主要关心的是i节点和数据块.i节点是固定长度的记录项,它包含有关文件的大部分 ...

  9. Vue2.5开发去哪儿网App 第四章笔记 上

    一 .  组件细节知识点 1.  解决组件在h5中编码规范 例如 : table , ul , ol  等等 <table> <tbody> <row></r ...

随机推荐

  1. PHP str_replace() 函数

    定义和用法 str_replace() 函数使用一个字符串替换字符串中的另一些字符. 语法 str_replace(find,replace,string,count) 参数 描述 find 必需.规 ...

  2. percona-toolkit -1

    http://blog.chinaunix.net/uid/16844903/cid-165634-list-1.html

  3. MySQL Optimizer Tracemy 与 logmnr:MySQL binlog logmnr----MYSQL 邱伟胜 专家博客

    http://www.noodba.com/ http://www.yhddba.com/?tag=mylogmnr https://github.com/noodba

  4. 按字母顺序排序的 arcpy.mapping 类列表

    arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...

  5. 有关<action android:name="android.intent.action.DELETE" />

    今天看一个病毒样本时遇到了这个Action,位于一个Activity节点下 通过真机测试与导师指导发现,这个Action的作用就相当于把其所在的应用加入到了“系统卸载程序”列表,当你卸载系统中的任一应 ...

  6. Android_Intent_passValue(4)

    xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  7. Spring 4 Ehcache Configuration Example with @Cacheable Annotation

    http://www.concretepage.com/spring-4/spring-4-ehcache-configuration-example-with-cacheable-annotatio ...

  8. Android NDK调试方式之一: adb logcat

    查看程序执行过程中所打印的log信息,用于辅助调试排除代码错误. 一.采用NDK安装包下Samples/hello-jni工程做实验 1)修改jni/hello-jni.c文件 #include &l ...

  9. C++的三大特性之一继承

    一.继承的相关基本概念 1.继承的定义     在C++中,可以使用继承来使新类得到已定义的一些类中的特性,这就好比与孩子从父亲母亲得到遗传类似,所以我们称原有的类为基类或父类,用原有类来生成新的类的 ...

  10. (转)fastdfs group通过添加硬盘扩容

    通过给group的机器添加硬盘的方式,实现某个group的扩容. fastdfs在一台服务器支持多个store_path,每个store_path指向一个存储路径.url “M00/3F/E1/oYY ...