正文
符號(hào)鏈接
符號(hào)鏈接的用途
符號(hào)鏈接是對(duì)一個(gè)文件的間接指針,它與前面介紹的硬連接不同,硬連接指向文件的i節(jié)點(diǎn)。引入符號(hào)鏈接是為了避開硬連接的一些限制:
硬鏈接通常要求鏈接和文件位于同一文件系統(tǒng)中。
只有超級(jí)用戶才能創(chuàng)建指向目錄的硬鏈接(在底層文件系統(tǒng)支持的情況下)。
而對(duì)于符號(hào)鏈接:
對(duì)符號(hào)鏈接以及它指向何種對(duì)象并無任何文件系統(tǒng)限制;
任何用戶都可以創(chuàng)建指向目錄的符號(hào)鏈接。
跟隨符號(hào)鏈接
符號(hào)鏈接一般用于將一個(gè)文件或整個(gè)目錄結(jié)構(gòu)移到系統(tǒng)中另外一個(gè)位置。
用符號(hào)鏈接作為函數(shù)參數(shù)時(shí),需要了解該函數(shù)所處理的是否是符號(hào)鏈接指向的文件。也就是是否跟隨符號(hào)鏈接。
如果該函數(shù)具有處理符號(hào)鏈接的功能,則其路徑名參數(shù)引用由符號(hào)鏈接指向的文件。
否則,一個(gè)路徑名參數(shù)引用鏈接本身。
圖4-17列出了本章中所說明的各個(gè)函數(shù)是否處理符號(hào)鏈接。
特殊的例子:
如果同時(shí)使用O_CREAT和O_EXCL,調(diào)用open函數(shù)。
我們知道如果要打開的是文件,而文件已經(jīng)存在,則出錯(cuò)。如果不存在則創(chuàng)建此文件,這使得測(cè)試和創(chuàng)建兩者成為一個(gè)原子操作。
如果要打開的是符號(hào)鏈接,不管符號(hào)鏈接指向的文件是否存在,都會(huì)返回錯(cuò)誤。這種處理方式的意圖是堵塞一個(gè)安全性漏洞,以防止具有特權(quán)的進(jìn)程被誘騙寫錯(cuò)誤的文件。
例如:進(jìn)程A用于寫已經(jīng)存在的A.txt文件,如果刪除A.txt文件,而把A.txt文件制作成一個(gè)符號(hào)鏈接指向自定義文件,進(jìn)程就可以隨意寫任何文件了。