В системах POSIX есть две соответствующие функции: stat () и lstat () .Они используются, чтобы выяснить, относится ли путь к реальному объекту, к которому у вас есть права доступа, и если да, возвращенные данные сообщают вам, какой это тип объекта.Разница между stat()
и lstat()
заключается в том, что если имя, которое вы даете, является символической ссылкой, stat()
следует за символической ссылкой (или ссылками, если они связаны друг с другом) и сообщает об объекте в конце цепочкиlinks, тогда как lstat()
сообщает о самой символической ссылке.
#include <sys/stat.h>
struct stat sb;
if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode))
{
...it is a directory...
}
Если функция указывает, что она была успешной, вы используете макрос S_ISDIR () из <sys/stat.h>
, чтобы определить,файл на самом деле является каталогом.
Вы также можете проверить другие типы файлов, используя другие S_IS*
макросы:
S_ISDIR
- каталог S_ISREG
- обычный файл S_ISCHR
- символьное устройство S_ISBLK
- блочное устройство S_ISFIFO
- FIFO S_ISLNK
- символьноессылка S_ISSOCK
- сокет
(Некоторые системы также предоставляют несколько других типов файлов; S_ISDOOR
доступен, например, в Solaris.)