文件和目录

Unix 所有的文件都对应一个 struct stat,包含了一个文件所有的信息。

#include <sys/stat.h>

struct stat {
mode_t st_mode; // 文件类型和用户访问权限
ino_t st_ino; // inode 号
dev_t st_dev; // 文件系统设备号
dev_t st_rdev; // 特殊文件设备号
nlink_t st_nlink; // 链接(引用)计数,这个指对inode的链接数
uid_t st_uid; // 文件所有者 ID
uff_t st_gid; // 文件组所有者 ID
off_t st_size; // 普通文件的字节数
struct timespec st_atime; // 文件最后访问的时间
struct timespec st_mtime; // 文件最后修改的时间
struct timespec st_ctime; // 文件最后状态改变的时间,对inode操作
blksize_t st_blksize; // 最佳I/O块大小
blkcnt_t st_blocks; // 磁盘分配的块数
};

文件类型

  • 普通文件
  • 目录文件
  • 块特殊文件
  • 字符特殊文件
  • FIFO
  • 套接字
  • 符号链接

可以用 宏 S_ISXXX(mode) 来判断具体的文件类型,或者用 st_mode 与屏蔽字 S_IFMT 进行逻辑“与”运算,宏定义为:

#define S_ISXXX(mode) ((mode) & S_IFMT)) == S_IFXXX

文件访问权限

文件访问权限(用户)是由 S_IXXXX 等来控制的,这里稍微理一下。O_RDWR 这些标志是文件打开读写执行时用的,前缀为O(open),这里S(stat)开头的宏是关于文件的类型和用户文件访问权限的。

S_IRUSR、S_IWUSR、S_IXUSR 分别为用户(所有者)读、写、执行,当三个都满足时可以直接写 S_IRWXU,其他类型用户类似。

联系屏蔽字umask,有三个八进制位,分别代表所有者,组,其他用户。

  • 400 用户读
  • 200 用户写
  • 100 用户执行

其他用户类型类似。在文件模式中创建屏蔽字为 1 的位,文件中mode中的相关位将被关闭。

链接

  • 硬链接
  • 符号链接

每个inode中都有一个链接计数,其值是指向该inode的文件目录项数,同时也包含在结构stat中的st_nlink里。只有当目录项数减为 0 时,才可删除该数据块。这种链接称为硬链接。

符号链接可以理解为是文件数据块的一个指针,删除了文件,符号链接也就失效了。

再看个目录项的链接计数: 一个也目录下的链接计数最后少为2,一个来自命名改目录的目录项,一个是在目录中的.项。

结语

感觉这章的重点就在这些地方了,文件系统这一块我只说了大概,下一篇深入理解下linux的文件系统

最新文章

  1. n个结点,不同形态的二叉树(数目+生成)
  2. 表(list)
  3. (easy)LeetCode 234.Palindrome Linked List
  4. UVA 11354 Bond 邦德 (RMQ,最小瓶颈MST)
  5. Codeforces 437E The Child and Polygon(间隔DP)
  6. UEP-find查询
  7. lk中内联调用的dsb()
  8. php设置cookie为httponly防止xss攻击
  9. 鼠标事件event和坐标
  10. 如何让自己的Dev C++用上C++11,c++14标准
  11. firefox extension教程
  12. Spark2.0.0源码编译
  13. 鼠标滚轮更改transform的值(vue-scroller在PC端的上下滑动)
  14. Kafka(二)-- 安装配置
  15. centos7 安装django
  16. J06-Java IO流总结六 《 BufferedReader和BufferedWriter 》
  17. kafka consumer demo
  18. 组合数计算-java
  19. Qt 检验器 三种典型类的用法
  20. matlab_legend_使用

热门文章

  1. Android 性能优化(5)网络优化 (1) Collecting Network Traffic Data 用Network Traffic tool :收集传输数据
  2. [转]T4系列文章之3:T4语法的介绍
  3. 在dataGridView空间中添加数据
  4. 一个JavaScript贷款计算器
  5. P2668 斗地主 dp+深搜版
  6. ubuntu系统中查看本机cpu和内存信息的命令和用法
  7. Android RecyclerView局部刷新那个坑
  8. 微信小程序组件解读和分析:二、scroll-view可滚动视图区域
  9. dede手机访问网站跳转到手机端模板
  10. 浮动布局demo