Re[8]: Как определить размер(длину) файла в Линукс средствам
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.11.07 04:33
Оценка: 10 (2)
Здравствуйте, Conr, Вы писали:

C>Вроде подобный код у меня всегда работал на Linux'ах всяких, Bsd и MacOSX :xz: А на какие системы это непереносимо? просто для общего развития...


C>if( (st.st_mode & S_IFMT) != S_IFREG )


Кстати, более рекомендуемый вариант — if(!S_ISREG(st.st_mode))

C>{

C> // non-seekable
C>}

Да файлы-то конечно seekable. Но кроме них ещё могут быть плоские диски и другие более странные объекты. Вот тут и начинается:

— традиционные юниксы: для каждого диска (раздела, слайса, etc.) есть блочное устройство (для монтирования) и байтовое (для ремонтов и дампов)
— FreeBSD: оставлено только байтовое ('c') устройство
— Linux: оставлено только блочное ('b') устройство

Проверка по st_mode на seekable, в таком случае, точнее всего в Linux (по условию S_ISREG(st.st_mode)||S_ISBLK(st.st_mode)). На всех прочих (с заменой S_ISBLK на S_ISCHR) она будет давать сильные сбои.
The God is real, unless declared integer.
Отредактировано 23.01.2016 13:41 netch80 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.