正如前面所述,这是UNIX文件系统的经典格式,在Bach〔1986〕一书的第4章中对此作了说明。关于伯克利快速文件系统对此所作的更改请参阅Leffler等〔1989〕中的第7章。4.15 link, unlink, remove和rename函数如上节所述,任何一个文件可以有多个目录项指向其i节点。创建一个向现存文件连接的方法是使用link函数。#include int link(const char existingpath, const char newpath); 返回:若成功则为0,若出错则为-1 此函数创建一个新目录项newpath,它引用现存文件existingpath。如若newpath已经存在,则返回出错。创建新目录项以及增加连接计数应当是个原子操作(请回忆在3.11节中对原子操作的讨论)。大多数实现,例如SVR4和4.3+BSD要求这两个路径名在同一个文件系统中。POSIX.1允许支持跨越文件系统的连接的实现。只有超级用户进程可以创建指向一个目录的新连接。其理由是这样做可能在文件系统中形成循环,大多数处理文件系统的公用程序都不能处理这种情况(4.16节将说明一个由符号连接引入的循环的例子)。为了删除一个现存的目录项,可以调用unlink函数。#include int unlink(const char *pathname); 返回:若成功则为0,若出错则为-1 此函数删除目录项,并将由pathname所引用的文件的连接计数减1。如果该文件还有其他连接,则仍可通过其他连接存取该文件的数据。如果出错,则不对该文件作任何更改。我们在前面已经提及,为了解除对文件的连接,必须对包含该目录项的目录具有写和执行许可权。正如4.10节所述,如果对该目录设置了粘住位,则对该目录必须具有写许可权,并且具备下面三个条件之一:拥有该文件、拥有该目录、具有超级用户优先权。

想进一步了解UNIX文件系统的实际应用和管理吗?您可以查看《操作系统unix文件系统》,这本书对UNIX文件系统进行了深入讲解。还可以参考《UNIX文件系统》,了解更多关于UNIX文件系统的具体实现细节。如果您对操作系统文件系统管理感兴趣,可以浏览《操作系统文件系统管理》以及《操作系统文件系统管理模拟》。这些资源不仅让您掌握理论知识,更提供了实操技巧,帮助您在实际项目中游刃有余。

是否想要亲自模拟UNIX文件系统的工作原理?那么《模拟unix文件系统》《模拟UNIX文件系统》这两本书将是您的绝佳选择。通过动手实践,您将对UNIX文件系统有更直观、更深刻的理解。

在了解了这些基础知识后,是否觉得仍意犹未尽?不妨看看《Unix文件系统命令》以及《UNIX高级文件系统》。这些资源将带您领略更高级的文件系统管理技术,让您在UNIX世界中更加得心应手。

探索这些链接,您将会发现,UNIX文件系统的世界是如此广阔而精彩!