1. 連結的分類:
連結分為軟連結和永久連結:
1> 軟連結:
軟連結又叫符號連結,這類檔案包含了另外一個檔案的路徑。可以串連任意檔案和目錄,也可以串連不同的檔案系統檔案,也可以串連不存在的檔案,還可以迴圈串連自己。
2> 永久連結是一個已存在檔案的另一個名字。注意:
1) 只能在同一個檔案系統中的檔案才能建立永久連結;
2) 不允許給目錄建立永久連結。
2. 在shell介面使用ln命令建立連結
當我們需要在不同的目錄,用到相同的檔案時,我們不需要在每一個需要的目錄下都放一個必須相同的檔案,我們只要在某個固定的目錄,放上該檔案,然後在其它的目錄下用ln命令連結(link)它就可以,不必重複的佔用磁碟空間。例如:
ln –s /bin/less /usr/local/bin/less,其中-s 是代號(symbolic)的意思。
如果你用ls察看一個目錄時,發現有的檔案後面有一個@的符號,那就是一個用ln命令產生的檔案,用ls –l命令去察看,就可以看到顯示的link的路徑了。
這裡有兩點要注意:
1> ln命令會保持每一處連結檔案的同步性,也就是說,不論你改動了哪一處,其它的檔案都會發生相同的變化;
2> ln的連結又軟連結和永久連結兩種:
1) 軟連結建立指令:ln –s filename link_filename,意為建立一個名為 “link_filename”指向“filename”的連結檔案,它只會在你選定的位置上產生一 個檔案的鏡像,類似windows下的快鍵方式。
2) 永久連結建立指令:ln filename link_filename,沒有參數-s, 它會在 你選定的位置上產生一個和源檔案大小相同的檔案。
無論是軟連結還是永久連結,檔案都保持同步變化。
指令參數詳細說明:
-f : 鏈結時先將與 dist 同檔名的檔案刪除
-d : 允許系統管理者硬鏈結自己的目錄
-i : 在刪除與 dist 同檔名的檔案時先進行詢問
-n : 在進行軟連結時,將 dist 視為一般的檔案
-s : 進行軟鏈結(symbolic link)
-v : 在連結之前顯示其檔名
-b : 將在鏈結時會被覆寫或刪除的檔案進行備份
-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
-V METHOD : 指定備份的方式
--help : 顯示輔助說明
--version : 顯示版本
3. C程式中使用link函數建立
link函數申明如下:
#include <unistd.h>
int link (const char * oldpath, const char * newpath);
函數說明:link()以參數newpath 指定的名稱來建立一個新的連結(永久連結)到參數oldpath 所指定的已存在檔案. 如果參數newpath 指定的名稱為一已存在的檔案則不會建立連結。
傳回值:成功則返回0, 失敗返回-1, 錯誤原因存於errno。
錯誤碼:
1、EXDEV 參數oldpath 與newpath 不是建立在同一檔案系統.
2、EPERM 參數oldpath 與newpath 所指的檔案系統不支援硬串連
3、EROFS 檔案存在於唯讀檔案系統內
4、EFAULT 參數oldpath 或newpath 指標超出可存取記憶體空間.
5、ENAMETOLLONG 參數oldpath 或newpath 太長
6、ENOMEM 核心記憶體不足
7、EEXIST 參數newpath 所指的檔案名稱已存在.
8、EMLINK 參數oldpath 所指的檔案已達最大串連數目.
9、ELOOP 參數pathname 有過多符號串連問題
10、ENOSPC 檔案系統的剩餘空間不足.
11、EIO I/O 存取錯誤.
範例:
/* 建立/etc/passwd 的硬串連為pass */
#include<unistd.h>
main()
{
link("/etc/passwd", "pass");
}