我有一个函数,用于检查传入的文件名是否为.
或..
。但我不知道如何正确命名它。 类似于 的东西IsCurrentOrParentDirectory()
是模棱两可的,因为该函数采用文件名而不是完整路径。(直觉上,一位程序员会认为/usr/
当我在 时传递/usr/
会返回true
,但事实并非如此。)
这些目录条目有专门术语吗?如果有,是什么?
答案1
来自POSIX 标准:
特殊文件名点应引用其前身指定的目录。特殊文件名点-点应引用其前身目录的父目录。作为特殊情况,在根目录中,点-点可以引用根目录本身。
所以,实际上,如果你想检查文件名是否是.
或,..
你必须称其为IsDotOrDotDot()
,或者,使用 POSIX 路径名解析术语,,IsPredecessorOrParentOfPredecessor()
甚至可能PointsToPredecessorOrParentOfPrecedessor()
......你明白了。问题是后一种术语只有在查看完整路径名时才有意义。但无论如何,没有人会理解这一点。
考虑到和.
是..
有效的文件名(只是解释不同),你应该坚持你所拥有的,依赖于意义而不是它们内部的调用方式。
答案2
.
和..
通常用于描述相对路径与绝对路径,例如/usr
。我将利用这种差异并将函数声明为IsRelativeCurrentOrParentDirectory()
。
请注意,点引用可能出现在路径中的任何位置。那怎么办/usr/local/..
?
答案3
slhck♦ 引用的 POSIX 标准指出,
特殊文件名点应指…。 特殊文件名点点应指…。
(强调)。因此,虽然这并不完全是技术的看起来“特殊文件名”可能就是官方的名称。如果您将函数命名为以下任何一种,您的用户可能就会理解:
IsSpecialDirectory()
、IsSpecialFilename()
或简称IsSpecialName()
。
或者你也可以使用IsStandardDirectory()
、IsStandardFilename()
或IsStandardName()
。这遵循 Unix 命名约定(标准输入、标准输出),用于自动为你建立的事物(在本例中为mkfs
和mkdir
)。 另一方面,IsAutomatic…()
或可能不够直观。IsDefault…()
答案4
Posix 在谈论父子目录关系时相当含糊。正如其他人所说,.
/..
在与其他人交谈或交流时没有帮助。
文件结构可以看作是一种树形数据结构。在这里,通常“父”和“子”或“女儿”就足以传达含义。你会看到数据结构教科书都遵循这种惯例
或者,似乎可以将树称为树的“上”和“下”。按照惯例,“上”表示更靠近根目录,“下”表示子目录。
我认为或都IsCurrentOrUp()
可以IsCurrentOrParent()
说是命名函数的良好做法。