当前目录(。)和父目录(..)的技术术语是什么?


20

我有一个函数来检查传入的文件名是.还是..。但是我不知道如何正确命名。喜欢的东西IsCurrentOrParentDirectory()是模糊的,因为该功能需要一个文件名,而不是完整的路径。(直觉上,一个程序员会期望/usr/在我进入时/usr/会通过true,但实际上并非如此。)

这些目录条目是否有技术术语?如果有一个,那是什么?


1
。和..根本不是文件名,而是文件夹。为什么不检查输入是否为有效文件(根据stat()的类型为IF_REG)呢?PS这可能更适合StackOverflow
Tonny

7
@Tonny ... 根据POSIX标准的文件名。请参阅下面的我的报价。我会说这很好,因为它涉及一般的计算概念。
slhck 2014年

我不得不承认我的措词又是模棱两可的。该函数采用单个文件或目录名(foo.barfoo,...),但不是一个路径(foo/bar/foo/,...)。但是由于目录,链接等也是文件,因此我将其保留为原样。
Max Truxa 2014年

@slhck POSIX将该文件称为文件,但对任何文件系统对象都执行此操作。POSIX术语中的文件通常应阅读为“文件系统对象”的缩写。在早期的Unix中,它派生了所有FSO,实际上它们确实是文件,但是对于某些现代实现而言,并非如此,对于非Unix,但对于POSIX兼容的操作系统(最明显的例子是Windows NT),当然并非如此。-我可能应该在评论中写“是一个普通文件”而不是“有效文件”,但是无论如何,Max Truxa的评论还是有争议的。
Tonny 2014年

Answers:


23

根据POSIX标准

特殊的文件名点应指向其前身指定的目录。特殊的文件名点号应指向其前身目录的父目录。作为一种特殊情况,在根目录中,点-点可能指向根目录本身。

因此,实际上,如果您想检查文件名是.还是..必须调用它IsDotOrDotDot(),或者使用路径名解析的POSIX术语IsPredecessorOrParentOfPredecessor(),或者甚至PointsToPredecessorOrParentOfPrecedessor()……就可以了。问题在于后一种术语仅在查看完整路径名时才有意义。但是无论如何,没人会理解。

考虑到...是有效的文件名(只是以不同的方式解释),您应该仅使用已有的文件名,而是依靠含义而不是在内部如何调用它们。


.bash_history点状或不斑点?我不确定该函数名称是否比打开的OP更具描述性。
延斯·埃拉特

@JensErat这与问题无关。现在的问题是文件名部分是否.或者..,而不是它是否刚开始用.。当然,OP的功能名称更具描述性。我只是在向他指出技术上的含义。
slhck

2
的确可以,但是IsDotOrDotDot()对于该功能的作用却什么也没说。
Jens Erat 2014年

“前任”是指路径说明中紧接其前的路径元素。如果仅查看目录中的条目名称,则“当前”或“父”是更好的术语。
西蒙·里希特

2
我会使用@JensErat IsDotOrDotDot。任何熟悉文件系统概念的人都会立即理解它。是否.bash_history为“点” 是有争议的,因为当时没有提供关于“点”的含义的上下文,但是绝对不是“点或点”。
kinokijuf 2014年

4

.并且..通常用于描述相对路径与绝对路径(例如)/usr。我会使用这种差异并将函数声明为IsRelativeCurrentOrParentDirectory()

请注意,点引用可能会出现在路径中的任何位置。那/usr/local/..


我未能指出该函数仅使用文件名而不是完整路径。我相应地更新了问题。
Max Truxa 2014年

2

有用引用的POSIX标准说:

特殊的文件名点应指向…。  特殊的文件名点号应指向…。

(强调)。因此,虽然它不是完全技术性的,但看起来像“特殊文件名”可能只是正式名称。如果您调用以下任何函数:或简单地IsSpecialDirectory(),您的用户可能会理解它 。IsSpecialFilename()IsSpecialName()

或者你可以一起去IsStandardDirectory()IsStandardFilename()IsStandardName()。这遵循Unix命名约定(标准输入,标准输出),用于自动为您建立的内容(在这种情况下,由mkfsmkdir)。  IsAutomatic…()IsDefault…(),另一方面,可能还不够直观。


实际上,我的名字IsMagicDirectory()很接近这个名字,但是我认为您的措辞更加直观和恰当(特别是因为它使用了已建立的命名约定)。使用IsSpecialFileName它甚至可以清楚地表明该函数不会接收路径,而只会接收单个文件(或目录,链接等)名称。
Max Truxa 2014年

好建议。但是,“特殊”可能还包括链接,FIFO等,对吗?
slhck

@slhck:是的,设备(例如磁盘和ttys)被称为“特殊文件”。而且,是的,该术语可以宽松地应用于文件系统的符号链接,FIFO和其他奇特的定义,即“常规文件”以外的任何类型的文件(i节点)。(是的,目录也属于这个类别。)因此,IsSpecialFile()这将是一个错误的建议。但是我没有建议。我建议IsSpecialFilename()。虽然名称sda1consolekmemmyfifourandom都暗示,他们没有保留,没有固有的特殊。但是...本质上是特殊的文件名
斯科特

1

我从* nix领域了解到的唯一术语是CWD“当前工作目录”。这实际上是经常使用的。例如/proc/$$/cwd,请参见哪个链接是您从中运行命令的目录的链接。

..除了dot-dot@slhck指出的以外,我不知道任何标准名称。


0

Posix在谈论父子目录关系时非常含糊。正如其他人所说,./ ..与其他人交谈或交流时没有帮助。

可以将文件结构视为树数据结构。在这里,通常“父母”和“孩子”或“女儿”足以传达含义。您会看到数据结构教科书遵循了这一约定

或者,似乎可以将树称为“上”和“下”树。按照惯例,“上”表示靠近根目录,“下”表示子目录。

我认为IsCurrentOrUp()或者IsCurrentOrParent()可以说是命名功能的好习惯。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.