如上节所述,任何一个文件可以有多个目录指向其i节点。创建一个指向现有文件的链接的方法是使用link函数或linkat函数。

#include <unistd.h>

int link(const char * existingpath, const char *newpath);
int linkat(int efd, const char *existingpath, int nfd, const char *newpath, int flag);

这两个函数创建一个新的目录项newpath,它引用现有文件existingpath。如果newpath已经存在,则返回出错。只创建newpath中的最后一个分量,路径中的其他部分应当已经存在。

#include <unistd.h>

int unlink(const char *pathname);
int unlinkat(int fd, const char *pathname, int flag);

只有当链接计数达到0时,该文件的内容才可被删除。另一个条件也会阻止删除文件的内容——只有进程打开了该文件,其内容也不能删除。

关闭一个文件时,内核首先检查打开该文件的进程个数;如果这个打开该文件的进程计数达到了0,内核再去检查其链接计数;如果链接计数也是0,那么就删除该文件的内容。

如果pathname是符号链接,那么unlink删除该符号链接,而不是删除由该链接所引用的文件。

给出符号链接名的情况下,没有一个函数能删除由该链接所引用的文件。

我们也可以用remove函数解除对一个文件或目录的链接。

对于文件,remove的功能与unlink相同。对于目录,remove的功能与rmdir相同。

#include <stdio.h>

int remove(const char* pathname);

results matching ""

    No results matching ""