linux中为什么相同目录下生成相同名字的文件和文件夹时候出错

在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文件系统结构linux中为什么相同目录下生成相同名字的文件和文件夹时候出错

1.        超级块(super block):记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息;

2.        i节点(inode):记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;

3.        block:实际记录文件的内容,若文件太大时会占用多个block。

由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码。

Inode索引结构

linux中为什么相同目录下生成相同名字的文件和文件夹时候出错

JFFS2文件系统

JFFS2文件系统以节点方式来管理flash设备上的所有文件,目录也被当作一种普通的文件来管理。有dirent和inode两种节点类型,所有的信息分散的存储与各个节点之中。Dirent形成整个文件系统的层次结构,inode管理构成文件的所有数据(普通节点和meta data节点)

linux中为什么相同目录下生成相同名字的文件和文件夹时候出错

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”是不同的东西。