1.link,linkat函数
1.1函数原型
#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);
成功返回0,失败返回-1.
1.2函数简单说明
link函数创建新的文件链接newpath(硬链接)到existingpath。如果newpath已经存在则返回错误。
link函数只有最后的部分会被创建,其余肯定已经存在。
linkat函数已存在文件被efd和existingpath定义。而新建的链接由nfd和newpath定义。
默认情况下路径都是相对于fd文件的相对路径。但是如果相对应的fd设置了AT_FDCWD标志,那么相对路径是相对当前路径。如果路径是绝对路径,则fd被忽略。
如果指向的文件是软连接,那么flag控制新创建的链接指向软链接还是软链接指向的文件。如果AT_SYMLINK_FOLLOW标志被设置了,那么指向的是链接指向的文件。不然指向的是链接本身。
新的文件创建和node数增加是一个原子操作。
而且大多数应用系统要求两个文件不能是跨文件系统的。
2.unlink,unlinkat函数
2.1函数原型
#include <unistd.h>
int unlink(const char* pathname);
int unlinkat (int fd,const char* pathname, int flag);
成功返回0,失败返回-1.
2.2函数简单说明
两个函数删除文件入口,并且减少pathname的文件链接数。如果文件还有其他硬链接,数据也可以通过该硬链接读取。
删除一个文件链接,我们必须要文件所在目录的写权限和操作权限。如果目录的sticky bit设置了。那么我们要有写权限和下面三种选项的一种
1.文件所有者2.目录所有者3.超级用户
只有当文件链接减为0时文件才可以被删除。如果文件被程序打开了要等程序结束关闭文件后删除。
其它用法和上面的一样。
3.remove函数
3.1函数原型
#include<stdio.h>
int remove(const char* pathname);
成功返回0,失败返回-1.
3.1函数简单说明
对于文件来说,remove和unlink一样,对于目录,remove和rmdir一样。