Сообщение Re[8]: Как определить размер(длину) файла в Линукс средствам от 29.11.2007 4:33
Изменено 23.01.2016 13:41 netch80
Здравствуйте, 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) она будет давать сильные сбои.
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) она будет давать сильные сбои.
Re[8]: Как определить размер(длину) файла в Линукс средствам
Здравствуйте, 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) она будет давать сильные сбои.
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) она будет давать сильные сбои.