簡體   English   中英

在linux / unix下,如何發現目錄是否是使用c ++的鏈接?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM