zoukankan      html  css  js  c++  java
  • APUE 文件和目录

    文件和目录

    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的文件系统

  • 相关阅读:
    大三进度条01
    阅读笔记01
    问题账户需求分析
    《人月神话》阅读笔记02
    《人月神话》阅读笔记01
    每周总结(第五周)
    《构建之法》阅读笔记06
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
  • 原文地址:https://www.cnblogs.com/shuqin/p/9939433.html
Copyright © 2011-2022 走看看