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相同