1. 程式人生 > >Ubuntu 下 stat 獲取符號連結檔案有 bug

Ubuntu 下 stat 獲取符號連結檔案有 bug

今天根據stat這個函式寫了ls -l的功能,測試時發現符號連結檔案 l 不能被正確識別。
我建立了一個符號連結檔案 10,指向普通檔案1.c
系統ls -l 10
stat 這個函式無法獲取符號連結檔案的屬性,他獲取的是該符號連結指向的檔案。
問題就來了,struct buf 這個結構體裡面 st_mode 的高4位表示檔案型別,有符號連結這個檔案型別。

測試程式碼:
標頭檔案省略
int main (int argc, char* argv[])
{
struct stat buf;
stat(argv[1], &buf);
if (S_ISLNK(buf.st_mode))
printf(“連結檔案!\n”);
if (S_ISREG(buf.st_mode))
printf(“普通檔案\n”);
return 0;
}
gcc後輸入 ./a.out 10
測試程式碼執行

綜合

系統自帶的ls -l 檢視符號連結檔案時的處理,應該不是使用stat這個函式來操作。