本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。
符號鏈接是指向一個文件的間接指針,它與硬鏈接有所不同,硬鏈接直接指向文件的i節點。引入符號鏈接的原因是為了避開硬鏈接的一些限制:
硬鏈接通常要求鏈接和文件位于同一文件系統中。
只有超級用戶才能創建指向目錄的硬鏈接。
對符號鏈接以及它指向何種對象并無任何文件系統限制,任何用戶都可創建指向目錄的符號鏈接。符號鏈接一般用于將一個文件或整個目錄結構移到系統中的另一個位置。
當使用以名字引用文件(而不是用打開文件的描述符引用文件)的函數時,應當了解該函數是否處理符號鏈接。也就是該函數是否跟隨符號鏈接到達它所鏈接的文件。如果該函數具有處理符號鏈接的功能,則其路徑名參數引用由符號鏈接指向的文件。否則,路徑名參數將引用鏈接本身,而不是該鏈接指向的文件。表4-9列出了文件和目錄章節中說明的各個函數是否處理符號鏈接。在表4-9中沒有列出mkdir、mkinfo、mknod和rmdir這些函數,其原因是,當路徑名是符號鏈接時,它們都出錯返回。以文件描述符作為參數的一些函數(如fstat、fchmod等)也未在該表中列出,其原因是,對符號鏈接的處理是由返回文件描述符的函數(通常是open)進行的。chown是否跟隨符號鏈接取決于實現。
在linux 2.1.81之前的各版本中,chown并不跟隨符號鏈接。從2.1.81版開始,chown跟隨符號鏈接。
表4-9的一個例外是,同時用O_CREAT和O_EXCL兩者調用open函數。在此情況下,若路徑名引用符號鏈接,open將出錯返回,并將error設置為EEXIST。這種處理方式的意圖是堵塞一個安全性漏洞,使具有特權的進程不會被誘騙對不適當的文件進行寫操作。
表4-9 各個函數對符號鏈接的處理
新聞熱點
疑難解答