1、文件操作基本元素
- 文件操作相关的最基本元素是:目录结构、索引节点和文件的数据本身。
- 目录结构(目录项)
- 索引节点(i节点)
- 文件的数据
2、文件系统的三个区域
属性:
超级块:存放文件系统本身的结构信息
i-节点表:存放i-节点信息列表
数据区:存放文件内容
文件访问过程:从文件名到文件内容,在目录中寻找文件名使用编号定位i-节点,i-节点包含数据块的列表。
3、link和unlink函数
注:link函数是创建的硬链接
#include<unistd.h>
int link(const char * existingpath,const char* newpath);
返回:成功返回0,出错返回-1
功能:创建一个指向现存文件链接(硬链接)
int unlink(const char * pathname);
返回:成功返回0,出错返回-1
功能:删除pathname指定的硬链接,并将由pathname所引用的文件链接计数减1.
- 硬链接创建条件
- 针对文件创建链接
- 必须是同一个分区
- 只有超级用户才能对目录建立链接
- 文件删除条件
- 链接计数为0
- 无其它进程打开该文件
if(link(argv[1],argv[i])<0)
{perror("linke error");continue;
}
4、硬链接与软链接
4.1使用系统命令创建链接
4.2软链接与硬链接的区别
软链接不能创建数据区域,但有自己的i节点,来指向文件。
硬链接没有自己的i节点,没有自己的单独的数据,只是指向i节点
5、Symlink和readlink函数
#include<unistd.h>
int symlink(const char *actualpath,const char* sympath);
返回:成功返回0,出错返回-1
功能:创建一个符号链接(软链接)
int readlink(const char * pathname,char * buf,size_t bufsize);
返回:成功返回读到的字节数,出错返回-1
功能:打开该链接本身,并读该链接中的名字
- 符号链接创建
- 创建符号链接并不要求actualpath存在
- 可以跨文件系统建立符号链接
6、remove和rename函数
#include<unistd.h>
int remove(const char *pathname);
返回:成功返回0,出错返回-1
功能:解除对一个文件或目录的连接int rename(const char * oldname,const char * newname);
返回:成功返回0,出错返回-1
功能:文件或目录更名
对于文件,remove的功能与unlink相同
对于目录,remove的功能与rmdir相同