1. link
任何一个文件可以有多个目录项指向其i节点,创建一个指向现有文件的链接的方法是使用link函数:
int link (const char * existingpath, const char * newpath);
定义与unistd.h中,调用成功返回0,否则返回-1
次函数创建一个新目录项newpath,它引用现有的文件existingpath,如若newpath已存在,则返回-1,而newpath路径中除最后一级目录的其它部分都应已经存在,否则出错返回-1
大多数实现都要求这两个路径名在同一个文件系统中,如果实现允许创建指向一个目录的硬链接,也必须是超级用户才可以这样做,因为这样可能会造成文件系统的循环,大多数应用程序不能处理这样的情况
2. unlink
删除一个目录项可以调用unlink函数
int unlink( const char * pathname );
定义于unistd.h,若调用成功返回0,否则返回-1
删除目录项并将所引用文件的链接计数减1。如果还有指向该文件的其他链接,则仍可通过其他链接访问该文件的数据
如果调用出错将返回-1,并且不会对文件造成任何更改
为了解除文件的链接,必须对包含该目录项的目录具有写和执行的权限。
当执行unlink函数时,内核首先检查打开该文件的进程数,如果该数打到0,然后检查其链接数,如果也是0,那么就删除文件
也就是说,当进程打开一个文件以后,对文件调用unlink,文件并不会立即删除,只有当文件被进程关闭或是进程终止的情况下,文件才会从磁盘上删除
如果这个文件是符号链接,unlink只会删除这个链接而不是这个链接所指向的文件,没有一个函数可以通过符号链接删除其指定的文件
只有超级用户可以使用unlink删除目录文件,但是通常应当使用rmdir函数而不是unlink
3. remove
删除文件,对于文件,unlink的功能与remove相同
int remove( const char *filename);
定义于stdio.h,若调用成功返回0,否则返回-1
4. rename
更换文件名
int rename(char *oldname, char *newname);
定义于stdio.h,若调用成功返回0,否则返回-1
注意的几点:
1。如果oldname不是目录,那么为该文件或符号链接更名,如果newname已存在并且不是目录,则先删除newname对应的文件,如果newname已存在并且是一个目录,则出错返回-1
2。如果oldname是一个目录,则为这个目录更名,如果newname是存在的目录且为空,则先删除newname对应的目录,如果newname是存在的目录且不为空,则出错返回-1
3。如果oldname和newname相同,则不做任何处理,调用成功返回0