Ты же вроде копал BDOS, судя по твоим базам?
Смотри процедуру по адресу D55A. get_next_extent. И ссылки на нее.
Когда BDOS записывает последовательный файл, производится постинкремент номера записи (Record в терминах CP/M - логический блок размером 128 байт). Если в результате инкремента текущий экстент каталога оказывается заполненым полностью, то он закрывается и формируется новый экстент. Ну а если в файл больше не писать, то при закрытии файла этот новый экстент оказывается пустым, но зарезервированным за этим файлом - поэтому он все равно запишется вместе с буфером каталога на диск.
Почему используется постинкремент - тоже вроде понятно. Первая запись имеет номер 0 и ее вначале надо записать, а потом уже увеличивать номер. Так что это не баг, а скорее особенность работы с последовательными файлами BDOS. Эмулировать ее в программах работы с дисками, я думаю, смысла никакого нет.





Ответить с цитированием