Hard Links硬链接
//create a new link for an existing file
#include <unistd.h>
int link(const char *oldpath, const char *newpath);
成功返回0, 失败返回-1,并设置errno。
int ret;
/*
* create a new directory entry,
* '/home/kidd/privateer', that points at
* the same inode as '/home/kidd/pirate'
*/
ret = link ("/home/kidd/privateer", /home/kidd/pirate");
if (ret)
perror ("link");
Symbolic Links符号链接 symlinks 或soft links 软链接
#include <unistd.h>
int symlink(const char *oldpath, const char *newpath);
成功返回0, 失败返回-1。
int ret;
/*
* create a symbolic link,
* '/home/kidd/privateer', that
* points at '/home/kidd/pirate'
*/
ret = symlink ("/home/kidd/privateer", "/home/kidd/pirate");
if (ret)
perror ("symlink");
经过测试, link的行为类似于复制一个文件或目录,但不是创建一个新文件,指向同一个文件,而symlink类似于shell里的ln

测试结果
Unlinking 取消链接
#include <unistd.h>
int unlink(const char *pathname);
成功返回0, 如果这个文件名是该文件的最后一个reference,那么这个文件将会从文件系统中删除。如果一个进程已经打开了这个文件,那么内核会在进程关闭文件后删除这个文件。
如果路径名pathname是一个synbolic link,那么这个link而不是原被链接的目标,被删除。
失败返回-1,并设置errno。

测试结果