Что такое альтернатива lstat() в Windows?

В Linux, когда stat() используется с неработающими файлами ссылок, происходит сбой с -1. Поэтому я использовал lstat(), который преуспел.

Для того же случая в винде _stat() не работает с неработающими ярлыками, а _lstat() в винде нет. Помогите пожалуйста найти альтернативу lstat() в windows.


person Gautham Polisetty    schedule 23.08.2012    source источник


Ответы (3)


GetFileAttributes или GetFileAttributesEx возможно (если я правильно понял stat и lstat). Цитата из документов:

Поведение символической ссылки — если путь указывает на символическую ссылку, функция возвращает атрибуты символической ссылки.

person Joey    schedule 23.08.2012

Принятый ответ не дает полного эквивалента stat. Структура stat определяется как

struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for filesystem I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };

но GetFileAttributes.. не предоставляет никакой информации о владельце (он возвращает данные в объекте WIN32_FIND_DATA). Если вам нужна эта информация о владельце, похоже, вы можете использовать GetSecurityInfo [1].

[1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa446629%28v=vs.85%29.aspx

person user877329    schedule 30.01.2015

эй, _stat() или stat() отлично работают и со сломанными ярлыками. Вот почему нет альтернативы lstat (UNIX) в Windows.

Там, где в Unix stat() не работает с неработающими ссылками, поэтому для решения проблемы предоставляется lstat.

Спасибо за вашу помощь.

person Gautham Polisetty    schedule 24.08.2012
comment
Я предполагаю, что вопрос и этот ответ были сделаны в контексте библиотеки времени выполнения MSVC? В любом случае, спасибо за публикацию этого ответа, так как он избавил меня от вопросов, почему, черт возьми, кто-то потрудился сделать _stat(), который следует ярлыкам, но не сделать _lstat(), который этого не делает, чтобы идти с ним. Я имею в виду, что первое — это намного больше работы, до такой степени, что у любого, кто достаточно сообразителен, чтобы сделать это, должно быть достаточно времени в процессе, чтобы понять, что он делает последнее также необходимым. - person SamB; 28.09.2016