Memphis Так то Вынь9х, а задание -- под ДОСом. Вот и попробуй пойми, имеется ли ввиду ДОСовская часть Винды или "нормальный" ДОС. Последний не поддерживает ФАТ32.
тоесть в идеале необходимо в реальном режиме, в fat16 записать файл больше двух гигов!....ну или как то исхитриться ... в надежде что препод не заметит =/.
Добавлю пару слов, чтоб уточнить Прерывания биос в принципе доступны в защищенном режиме, если этот защищенный режим 16-разрядный. Не стоит думать, что если режим "защищенный", то он обязательно 32-битный. Код, выполняющий прерывания дос и биос, предназначен для работы в 16-разрядном режиме. БОльшая часть функций работают как в реальном, так и в защищенном 16-битном режимах (при наличии правильного загрузчика этого самого режима, который дополнительно выставит правильные обработчики исключений). И, кстати... если при загрузке ДОС запускаются всевозможные менеджеры расширенной памяти (EMM386, QEMM и другие), то на самом деле мы уже работаем в "защищенном" или в виртуальном 86-м. (в чистом "реальном режиме" память свыше 1Мб недоступна) Нельзя записать файл размером больше, чем предусмотрено в файловой системе. Ссылка на кластер 16 бит. Всего может быть до 65535 кластеров. Несколько номеров зарезервированы. Итого, не просто "файл в 2Гб" невозможен - размер диска под ФАТ16 ограничен в 2Гб при размере кластера в 32К. Нет, это не зависит от реального или защищенного режима. Просто - ФАТ16 не позволяет этого. Необходимо иметь ФАТ32. В ФАТ32 можно создать файл в 4 Гб. Это можно сделать и в реальном режиме. Но ДОС 6 не знает о фат32. То есть, нужна досовая основа вин9х. Там делаем именно то, что предложил Memphis
Partner как раз от Руссиновича единственная из бесплатных которая обеспечивает полный доступ к ntfs, правда гляжу она везде в сети пропала, наверно платные конкуренты давят Q_sam ДОС 7 из win9x тоже прекрасно работает как обычный ДОС и без всей остальной "нагрузки", её только win заставка выдаёт. Но если нужно на компе у препода, где стоит "настоящий" DOS 6.22 и диск FAT16, то боюсь тебе и Руссинович не поможет - не разрешит же препод тебе диск в ntfs переформатировать ) А вообще-то задание странное может его уточнить стоит в свете того, что ты здесь узнал про ограничения файловых систем и защищённый режим? Или суть твоей работы как раз в том чтобы сделать свою файловую систему, работая с диском напрямую через порты (без дос и биос) из защищённого режима? Или защищённый режим всё таки предполагается на базе DOS-extender (коих существует множество и навярняка есть поддерживающие FAT32)?
Да вот сегодня хотел с преподом поговорить, небыло его(. а что касается DOS-extender то точно без них
Y_Mur NTFSDOS бесплатная, но она read-only, а NTFSDOSPro вроде была за деньги. Впрочем, могу ошибаться.
Partner за деньги если подключать её к win9x (там даже инсталлятор предупреждает - заплати и лети а если не хочешь, то установленный драйвер работает read-only), а в ДОС бесплатно, специально помню обратил на это внимание когда её нашёл и при инсталляции тоже никаких проблем - запись сразу работает в том числе и в dos 7, но если из dos 7 войти в win, то насколко помню драйвер продолжает работать, но переходит в read-only (это ограничение конечно легко обойти, но это уже другая тема и ТС она не актуальна).
Q_sam, потому что в ФАТ16 хоть ручками, хоть через порты, но нельзя больше 2Г файл создать. И даже ровно 2Гб нельзя создать, меньше чуток. А в ФАТ32 есть более простые способы. Потому и замолчал. зы: не, можно. Можно извратится, использовать некоторые баги, и создать файл хоть на флоп-дискете, для которого винда будет видеть размер намного больше физической емкости носителя... только его открыть нельзя будет, только смотреть на имя, размер, и тупо хихикать. Не думаю, что это является целью, поставленной твоим преподом )))
FatMoon если при загрузке ДОС запускаются всевозможные менеджеры расширенной памяти (EMM386, QEMM и другие), то на самом деле мы уже работаем в "защищенном" - абсолютно верно. Это PM 16 бит, но не V86. Для него (ежели не ошибаюсь) для индикации есть отдельный бит. Но дело не в RM/PM. Сама операционка должна поддерживать файлы 4 Гига. А в ДОСе это может только ФАТ32. Нельзя записать файл размером больше, чем предусмотрено в файловой системе. Ссылка на кластер 16 бит. Всего может быть до 65535 кластеров. Несколько номеров зарезервированы. Итого, не просто "файл в 2Гб" невозможен - размер диска под ФАТ16 ограничен в 2Гб при размере кластера в 32К. Нет, это не зависит от реального или защищенного режима. Просто - ФАТ16 не позволяет этого. Необходимо иметь ФАТ32. - полностью согласен.
Сам файловый дескриптор FAT имеет поле Size 32-битное, в байтах. Старший бит - под знак, следовательно больше 2Гб не получится.
Кхм.. что-то все какие-то сложности изобретают. Команду copy file1+file2 file3 и BAT-файлы уже отменили? Если в задании не указано, каким образом создавать файл.
Специально для SadKo ) Вот такая вот дискетка с файлами: Код (Text): Том в устройстве A имеет метку TEST Серийный номер тома: E057-C7E6 Содержимое папки A:\ 12.01.2009 15:58 0 0.txt 12.01.2009 15:59 10 10.txt 12.01.2009 16:00 4 294 967 295 big.txt 3 файлов 4 294 967 305 байт 0 папок 1 456 640 байт свободно То есть как минимум ДОС 7 и cmd в ХР на знак внимания не обращают (если он вообще учитывается)
SadKo Старший бит - под знак, следовательно больше 2Гб не получится. - Чепуха. Хочешь сказать, что есть файлы размером, к примеру, -128 байт ? Размер файла - в 32-х битном поле без знака. А почему ограничение в 2 ТБ - выше писали (ФАТ16 больше не может).
_edge Команду copy file1+file2 file3 и BAT-файлы уже отменили? - теоретически все верно. На практике - думаю не получится, ибо неизвестно, какой ДОСовой функцией (точнее, ключ 2/4 Гига) создается файл назначения file3. Впрочем, сегодня вечером дома проверю - у меня Вин98СЕ.
Не чепуха это будет тогда, когда тебе придётся мешать 32-битный int и unsigned int в один код - вот тогда и посмотрим. Файловая система какая?
Может, лучше провести эксперимент тупо по созданию файла в 4гб на fat32 файловой системе? Есть у вас функции CreateFile, WriteFile, CloseFile, например. Ну вот и попробуйте написать ими создать файл больше 2Гб. А то, что в вашем примере просто выводится stat - так вывести можно как signed, так и unsigned.
SadKo на дискетке есно fat12 ) А на флешке с fat32 вроде проблем с файлами > 2Гб не наблюдал, больше 4Гб проверить не могу поскольку сама флешка 4Гб в дисковом смысле .