Со страницы руководства stat (2)
:
stat()
статистика файла, на который указывает путь, и заполняет buf
.
lstat()
идентичен stat()
, за исключением того, что если путь является символической ссылкой, то указывается сама ссылка, а не файл, на который она ссылается.
Другими словами, вызов stat
будет проходить по символической ссылке на целевой файл и извлекать информацию для , которая. Попробуйте вместо этого использовать lstat
, это дастВы получите информацию для ссылки.
Если вы выполните следующее:
touch junkfile
ln -s junkfile junklink
, то скомпилируйте и запустите следующую программу:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main (void) {
struct stat buf;
int x;
x = stat ("junklink", &buf);
if (S_ISLNK(buf.st_mode)) printf (" stat says link\n");
if (S_ISREG(buf.st_mode)) printf (" stat says file\n");
x = lstat ("junklink", &buf);
if (S_ISLNK(buf.st_mode)) printf ("lstat says link\n");
if (S_ISREG(buf.st_mode)) printf ("lstat says file\n");
return 0;
}
вы получите:
stat says file
lstat says link
, как и ожидалось.