Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как узнать размер свободного места на диске в DOS?

50K
02 ноября 2009 года
Gvaler
8 / / 29.09.2009
Как узнать размер свободного места на диске в DOS? Функция _dos_getdiskfree() возвращает значение не более ~2Гб (65526*64*512, т.е avail_clusters*sectors_per_cluster*bytes_per_sector), хотя на диске свободно намного больше. Ведь программы как-то определяют это (тот же Norton Commander например).
Использую DOS 7.1; FAT32; компиляторы Borland C++3.1, OpenWatcom.
252
02 ноября 2009 года
koderAlex
1.4K / / 07.09.2005
getdfree() пробовали ? если не поможет , то структуру fat прочитать и разобрать не так уж сложно . )
14
02 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
Чет не припоминаю чтобы нортон определял > 2Гб, с ФАРом не путаете?
см. INT 21 / AX = 7303h
14K
03 ноября 2009 года
shoorick
48 / / 07.06.2006
не интересовался этим, но DOS Navigator точно показывает емкость больших дисков как 2Гб
50K
03 ноября 2009 года
Gvaler
8 / / 29.09.2009
getdfree() тоже самое, что и _dos_getdiskfree() - не помогает.

Да, вы правы, NC и DN не могут определить больше 2 Гб. Но команда DIR показывает правильное значение. Значит можно как-то эту информацию получить...
А что такое 7303h? Разве у 21 прерывания есть функция с таким номером? Если да, то куда возвращается результат?
1.9K
03 ноября 2009 года
andriano
474 / / 10.01.2008
DOS умеет работать только с FAT (теперь часто называемым FAT16), для которого размер тома не мог превосходить 2 Гб. Соответственно, и функций других быть не могло.
Последняя версия DOS - 6.22. Версии 7.1 в природе не существует, так представляется Win 9x для запущенных из нее DOS-программ.
Писать DOS компилятор, который мог бы генерить программы, работающие лишь в DOS-сессии Windows, абсурдно. Поэтому в стандартных библиотеках DOS компиляторов отсутствуют функции, не поддерживаемые DOS.
Хотите большего, следуйте следующему алгоритму:
1. Проверка версии DOS.
2. Если 6.22 и ниже - воспользоваться функцией _dos_getdiskfree.
3. Если версия 7.0 и выше - воспользоваться уникальными функциями DOS-сессии Windows для работы с FAT32 через прерывания.
50K
03 ноября 2009 года
Gvaler
8 / / 29.09.2009
Никакого Windows'а, чистый ДОС. (http://www.datalight.com/products/romdos/)
14
03 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
А почитать на сайте не пробовали? Помоему там четко написано:
Цитата:

ROM-DOS BUILD Utility - ROM-DOS BUILD utility enables developers to include or exclude a variety of features such as Kernel options, device drivers, FAT32 & Long File Name support and other ROM-DOS capabilities.


Так что берем SDK...

1.9K
03 ноября 2009 года
andriano
474 / / 10.01.2008
Цитата: Gvaler
Никакого Windows'а, чистый ДОС. (http://www.datalight.com/products/romdos/)


Простите за нескромный вопрос: а зачем этому DOS нужен диск размером больше 2 Гб?

hint: для 2 Гб диска таблицы FAT занимают 128 Кбайт, а FAT32 - 2 Мбайт, что делает абсолютно нереальным хранение в ОЗУ хоть небольшой части FAT. А если каждый раз считывать с диска, то скорость чтения файла уменьшится в сотни раз. Ориентировочно, скорость при чтении составит около 0.1 Мб/с, а записи - и того меньше.

50K
05 ноября 2009 года
Gvaler
8 / / 29.09.2009
Цитата: andriano
Простите за нескромный вопрос: а зачем этому DOS нужен диск размером больше 2 Гб?



Дык для записи и хранения большого объема данных, с которыми должна работать программа.

1.9K
05 ноября 2009 года
andriano
474 / / 10.01.2008
Повторяю: с диском, размеченным FAT32, DOS будет работать недопустимо медленно.
В частности, те самые 2 Гб будут писаться более 8 часов. Не лучше ли для задачи, работающей с большими объемами данных, использовать ОС, которая вместо 8 часов может сделать ту же самую работу менее чем за 1 минуту?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог