‘getcwd 函式正常工作’ 在 FreeBSD 手冊頁中 mount_nullfs 的聲明的含義?
在 FreeBSD 中,
man mount_nullfs
聲明:文件系統的虛擬副本和符號連結之間的主要區別在於功能在虛擬副本中
getcwd(3)
正常工作,並且其他文件系統可以安裝在虛擬副本上而不影響原始文件。為虛擬副本返回了一個不同的設備編號stat(2)
,但在其他方面它與原始設備沒有區別。本段的全部含義/含義是什麼?
文件系統的虛擬副本和符號連結之間的主要區別在於功能在虛擬副本中
getcwd(3)
正常工作,
getcwd
對符號連結目錄的行為是一個相當著名的陷阱,例如在Advanced Unix Programming中記錄(請參閱this SO question for a quote):chdir
並且getcwd
在涉及符號連結時不是對稱的。人們可能期望使用 將目錄更改chdir
為給定目錄,然後使用 檢索目前目錄getcwd
將返回相同的值;但當程序使用包含符號連結的路徑更改目錄時,情況並非如此——getcwd
返回取消引用所有符號連結後獲得的路徑。當將目錄更改為父目錄時,當包含符號連結的路徑和取消引用的路徑具有不同數量的組件時,這可能會產生意想不到的後果。並且其他文件系統可以安裝在虛擬副本上而不影響原始文件。
繼續 Stéphane 的範例
/tmp/b
,您可以在不影響的子目錄上掛載另一個文件系統/some/dir
,而在子目錄下掛載文件系統/tmp/a
也會使其顯示在下面/some/dir
。為虛擬副本返回了一個不同的設備編號
stat(2)
,但在其他方面它與原始設備沒有區別。這意味著
stat
在副本或其下的任何文件上執行將返回與原始設備號不同的設備號,但這是唯一的區別;除此之外,stat("/tmp/b/c", &buf)
並且stat("/some/dir/c", &buf)
會返回相同的資訊。