[英]Under linux / unix, how to discover if a directory is a link using c++?
我試圖弄清楚如何使用c ++找出目錄是否是符號鏈接
使用lstat和S_ISLNK(fs.st_mode)確定文件是否是符號鏈接很容易,但這似乎只適用於文件。 S_ISDIR總是說目錄是一個目錄,即使它實際上是一個指向目錄的符號鏈接。
那么,如何將目錄作為文件執行相同的操作?
實際的區別更為微妙。 如果你lstat("/path/link/")
,由於尾部斜杠,它將“查看”符號鏈接。 如果你執行lstat("/path/link")
你的代碼應該可以工作(注意沒有尾部斜杠)。 你可以在這個python示例中看到(即使不知道數字意味着什么,你可以看到結果的變化):
$ ln -s /etc /tmp/foo
>>> from posix import lstat
>>> lstat("/tmp/foo")
(41471, 24591, 64769L, 1, 1095, 501, 4, 1298667395, 1298667395, 1298667395)
>>> lstat("/tmp/foo/")
(16877, 131073, 64768L, 119, 0, 0, 12288, 1298663835, 1298667375, 1298667375)
確定給定目錄是否為符號鏈接的另一種方法是通過readlink
讀取鏈接:
char buffer[255];
int size = readlink("/my/path", buffer);
if (errno == EINVAL) {
/* here you know: "/my/path" isn't a symlink */
}
當然:如果你寫/my/path/
(用火車斜線),那么你的意思是: /my/path/.
這絕不是符號鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.