是否有无法命名文件的 POSIX 路径名?

Cha*_*art 5 unix path file-location posix filenames

POSIX 中是否有任何合法路径不能与文件相关联,规则或不规则?也就是说,哪个test -e "$LEGITIMATEPOSIXPATHNAME"不能成功?

说明 #1:路径名

通过“POSIX 中的合法路径”,我的意思是 POSIX 表示允许的路径,而不是 POSIX 没有明确禁止的路径。我查了一下,POSIX 规范称它们为字符串:

  1. 仅使用可移植文件名字符集中的字符[a-zA-Z0-9._-](参见http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_276);
  2. 不要以-;开头 和
  3. 长度介于 1 和 NAME_MAX 之间,这是一个不小于 14 的 POSIX 未指定数字。

POSIX 还允许文件系统可能比这更宽松,但它禁止字符 NUL 和/出现在文件名中。请注意lost+found,根据此 def ,这种典型的 UNIX 文件名不是 FPF。还有另一个常量 PATH_MAX,其用法无需进一步解释。

理想的答案将使用 FPF,但我对任何带有 POSIX 未明确禁止的文件名的示例感兴趣。

澄清#2:不可能

显然,路径名通常可以绑定到文件。但是 UNIX 语义会告诉您,有一些特殊的地方通常不能创建任意文件,例如在/dev目录中。POSIX 中是否规定了任何此类特殊位置?这就是问题所追求的。

har*_*ymc 3

由于最后一个问题是是否有特殊的地方通常不能有文件,例如 POSIX 中规定的 /dev 目录,那么答案是YES

IEEE 开放组基本规范第 6 期的第 10 章“POSIX 目录结构和设备”中给出了预先确定的文件和目录的完整列表:

以下目录应存在于合格系统上,并且合格应用程序应仅按照描述使用它们。严格遵守的应用程序不应假定能够在任何这些目录中创建文件,除非下面指定。

/
根目录。
/dev
包含 /dev/console、/dev/null 和 /dev/tty,如下所述。

以下目录应存在于合格系统上,并应按所述使用:

/tmp
可供需要创建临时文件的应用程序使用的目录。应允许应用程序在此目录中创建文件,但不应假定此类文件在应用程序调用之间保留。

以下文件应存在于符合要求的系统上,并且应可读可写:

/dev/null
无限的数据源和数据接收器。写入 /dev/null 的数据将被丢弃。从 /dev/null 读取应始终返回文件结束符 (EOF)。
/dev/tty
在每个进程中,与该进程的进程组关联的控制终端的同义词(如果有)。对于希望确保将消息写入终端或从终端读取数据(无论输出如何重定向)的程序或 shell 过程非常有用。它还可用于需要输出文件名的应用程序,当需要键入输出并且找出当前正在使用的终端很麻烦时。

以下文件应存在于符合要求的系统上,并且不需要可读或可写:

/dev/console
/dev/console 文件是系统控制台的通用名称(请参阅系统控制台)。它通常链接到实现定义的特殊文件。它应向系统控制台提供符合 IEEE Std 1003.1-2001 基本定义卷第 11 章通用终端接口要求的接口。