在Linux中,几乎所有内容都是文件描述符。目录是一种特殊类型的文件,从用户的角度来看,它可以保存其他文件。
因此,您不能同时在同一目录中拥有相同的名字。
如果可以的话,编码人员的生活将变得痛苦不堪。当有人要创建目录并检查目录是否存在时,将返回命令“ isDir”。
filename='out/a/acfg'
file_dir = os.path.split(filename )[0]
if not os.path.isdir(file_dir):
os.makedirs(file_dir)
if not os.path.exists(filename ):
os.system(r'touch %s' % filename)
生成了两个文件夹out,a
让那和再生成一个acfg的文件
如果out中有一个文件为a的文件将出错
名称保存在目录条目中,该目录条目链接到对应于文件的inode。
储存文件元信息的区域就叫做inode,中文译名为"索引节点"。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等
Flash芯片的擦除以块为单位,写以页为单位。在每个flash芯片中包括非常多的块,同款芯片上每个块的大小相同(2MB、4MB..),在每个块上包含多个页,每个页大小相同。在每个页面后都跟随着一个附加页,用来对对应页面进行标记或者对页上的数据进行校验,页面通常的大小为2Kb+64byte、512byte+32byte、1024byte+64byte
inode包含文件的元信息
- 文件的字节数
- 文件的拥有者uid
- 文件的所属组gid
- 文件的r、w、x权限
- 文件的时间戳
- ctime:文件的inode上一次变动的时间
- mtime:文件内容上一次变动的时间
- atime:文件上一次打开的时间
- 硬链接数
- 文件数据block的位置
- ext2文件系统结构
1. 超级块(super block):记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息;
2. i节点(inode):记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
3. block:实际记录文件的内容,若文件太大时会占用多个block。
由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码。
Inode索引结构
JFFS2文件系统
JFFS2文件系统以节点方式来管理flash设备上的所有文件,目录也被当作一种普通的文件来管理。有dirent和inode两种节点类型,所有的信息分散的存储与各个节点之中。Dirent形成整个文件系统的层次结构,inode管理构成文件的所有数据(普通节点和meta data节点)
new_inode=self.MakeInode(
ino=record['ino'],
version=record['version'],
mode=record['mode'],
uid=record['uid'],
gid=record['gid'],
isize=record['isize'],
atime=record['atime'],
mtime=record['mtime'],
ctime=record['ctime'],
offset=record['offset'],
dsize=record['dsize'],
compr=record['compr'],
usercompr=record['usercompr'],
flags=record['flags'],
payload=new_data
)
顺便说一句:这适用于所有操作系统,而不仅仅是Linux。尽管从桌面的角度来看,操作系统可以向文件或目录添加唯一标识符,然后将其从列表中删除。从命令行的角度来看,这将是有问题的。
在Windows上有一件事:我们使用区分大小写的名称。因此,“ MYFILE”和“ myfile”是不同的东西。