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的文件系统
APUE 文件和目录的更多相关文章
- [APUE]文件和目录(中)
		
一.link.unlink.remove和rename 一个文件可以有多个目录项指向其i节点.使用link函数可以创建一个指向现存文件连接 #include <unistd.h> int ...
 - [APUE]文件和目录(上)
		
一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/de ...
 - [APUE]文件和目录(下)
		
一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathn ...
 - APUE ☞ 文件和目录
		
粘着位(Sticky Bit) S_ISVTX位被称为粘着位.如果一个可执行程序文件的这一位被设置了,程序第一次运行完之后,程序的正文部分的一个副本仍被保存在交换区(程序的正文部分是机器指令).这使得 ...
 - (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
		
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
 - apue chapter 4 文件和目录
		
1.文件信息结构体 struct stat{ mode_t st_mode; //file type and permissions ino_t st_ino; //i-node number (se ...
 - APUE(4)---文件和目录 (3)
		
十三.函数rename和renameat #include <stdio.h> int rename(const char *oldname, const char *newname); ...
 - APUE(4)---文件和目录 (2)
		
七.函数umask umask函数为进程设置文件模式创建屏蔽字,并返回之前的值,这是少数几个没有出错返回函数中的一个.其中cmask是9个常量(S_IR/W/XUSR.S_IR/W/XGRP.S_IR ...
 - apue学习笔记(第四章 文件和目录)
		
本章将描述文件系统的其他特性和文件的性质. 函数stat.fstat.fstatat和lstat #include <sys/stat.h> int stat(const char *re ...
 
随机推荐
- YTU 2629: E1 一种颜色,三个分量
			
2629: E1 一种颜色,三个分量 时间限制: 1 Sec 内存限制: 128 MB 提交: 300 解决: 226 题目描述 在计算机中,常用三种基色红(R).绿(G).蓝(B)的混合来表示颜 ...
 - [JSOI 2016] 灯塔
			
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4850 [算法] 首先对不等式进行移项 : hj <= hi + p - sqr ...
 - Spring实战笔记
			
晚上看了这本书的前面几章,记录一下自己看到的要点. 全书分为四大部分,Spring核心,web,后台相关,与其它框架集成.今天主要看了第一部分. Spring最根本的使命是简化Java开发,全方位的简 ...
 - bzoj3262 陌上花开——CDQ分治
			
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3262 第一道CDQ分治题! 看博客:https://www.cnblogs.com/Narh ...
 - 0626-TP整理二(调试模式,空操作,跨控制器调用,跨方法跳转--redirect(),框架语法,创建model模型)
			
一.调试模式(入口文件:index.php) define('APP_DEBUG', true); //调试模式 define('APP_DEBUG', FALSE); //运行模式 开启日志信息 ...
 - 洛谷 P4180 【模板】严格次小生成树[BJWC2010]【次小生成树】
			
严格次小生成树模板 算法流程: 先用克鲁斯卡尔求最小生成树,然后给这个最小生成树树剖一下,维护边权转点权,维护最大值和严格次大值. 然后枚举没有被选入最小生成树的边,在最小生成树上查一下这条边的两端点 ...
 - HDU 1879(最小生成树)
			
#include "iostream" #include "algorithm" #include "cstdio" using names ...
 - 2017杭电多校06Rikka with Graph
			
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
 - 题解报告:hdu 5695 Gym Class(拓扑排序)
			
题目链接:acm.hdu.edu.cn/showproblem.php?pid=5695 Problem Description 众所周知,度度熊喜欢各类体育活动.今天,它终于当上了梦寐以求的体育课老 ...
 - Android内存管理(15)SparseArray系列代替HashMap系列
			
参考: https://liuzhichao.com/p/832.html http://www.2cto.com/kf/201311/255640.html 1,简介: SparseArray是an ...