【问题标题】:Do file systems have other components rather than files and directories?文件系统是否有其他组件而不是文件和目录?
【发布时间】:2015-12-20 20:38:31
【问题描述】:

我在视频教程中看到了这个 python sn-p,它检查列出的项目是目录还是文件:

for item in os.listdir("."):
    if os.path.isfile(item):
        # do something
    elif os.path.isdir(item):
        # do somethin
    else:
        # What is this case ?!

else语句有可能被命中吗?

【问题讨论】:

  • 还有islink,但the docs 声明isfileisdir 无论如何都会跟随链接,而ismount

标签: python filesystems


【解决方案1】:

正如@sisoft 所说,简单的答案是肯定的:确实存在支持文件和目录以外的文件类型的文件系统。

如果您有兴趣,更长的答案是文件系统支持的类型随文件系统的不同而有很大差异。 UNIX 将大量事物视为“文件”(即文件系统中的对象),因此具有多种类型。 Windows 有一组更受限制的对象(我相信只有文件、目录和链接(无来源))

文件系统的 POSIX 规范(由许多文件系统实现)没有指定它必须支持哪些对象 (source)。

通常,文件系统是一个相当开放的术语,可以指代任何对象存储。它存储的对象可以是任何东西。

如果您想了解有关文件系统的更多信息,Operating Systems 中有一个很棒的章节,其中提供了易于访问的介绍。

【讨论】:

    【解决方案2】:

    是的。还有其他类型,如管道、套接字、设备节点。 例如,isfile()isdir() 对于来自 /dev 的大多数文件返回 False。

    首先可以看到https://en.wikipedia.org/wiki/Unix_file_types

    【讨论】:

    • 是的。我记得我错了vi /dev/sda,vi提示说/dev/sda is not a file
    • 您是在谈论文件系统条目类型还是通用文件类型?因为答案取决于文件系统的含义——它是在 Unix 上以 / 开头的东西,还是作为数据布局的特定文件系统(比如 ex3 或 NTFS)。
    【解决方案3】:

    else 语句有可能被命中吗?

    您的代码片段使用了文件和目录的狭义定义:os.stat(path) (follows symlinks) is successful and either S_ISREG or S_ISDIR are true correspondingly

    else 子句可能会因不存在的路径或常规文件和目录的权限错误而触发。

    POSIX defines the following marcos:

    S_ISBLK(m)
    Test for a block special file.
    S_ISCHR(m)
    Test for a character special file.
    S_ISDIR(m)
    Test for a directory.
    S_ISFIFO(m)
    Test for a pipe or FIFO special file.
    S_ISREG(m)
    Test for a regular file.
    S_ISLNK(m)
    Test for a symbolic link.
    S_ISSOCK(m)
    Test for a socket.
    

    即,除了常规文件和目录之外,还可能有套接字、符号链接、管道、块/字符设备:

    >>> import os
    >>> import stat
    >>> stat.S_ISBLK(os.stat('/dev/sda').st_mode)
    True
    

    可能存在仅对特定文件系统有意义的其他对象。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2011-09-08
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2011-12-22
      • 2021-08-29
      相关资源
      最近更新 更多