Cтраница 3
Чтобы прочесть файл, DOS находит номер начального кластера в каталоге и затем просматривает FAT в поисках элемента начального кластера. Если весь файл помещен в одном кластере, элемент FAT содержит индикатор конца файла. В противном случае элемент FAT указывает номер следующего кластера, содержащего часть файла. DOS просматривает соответствующие элементы FAT, пока не встретит индикатор конца файла. Система хранения DOS позволяет сохранять файлы в смежных кластерах или фрагментами по всему диску. Каждый фрагмент имеет длину в один кластер, FAT содержит указатель, с помощью которого DOS может собрать все части. [31]
В качестве примера рассмотрим программу, модули которой читают и обрабатывают записи некоторого файла. Вызывающая подпрограмма может содержать цикл для повторной активизации модуля чтения до получения индикатора, свидетельствующего об окончании файла. Если такой индикатор не устанавливается в заглушке модуля чтения, вызывающая программа будет продолжать активизации бесконечно. Поэтому заглушка должна программироваться так, чтобы, прочитав несколько тестовых записей, установить индикатор конца файла. Таким образом, цикл рано или поздно закончится, причем будут проверены как активизирующая подпрограмма, так и подпрограмма, завершающая обработку файла. [32]
Для управления циклом вводится индикатор конца файла и ему придается начальное значение NO. Основной цикл выполняется до тех пор, пока индикатор не изменится на YES с помощью конструкции в КОНЦЕ предложения ЧИТАТЬ. Однако даже в этот момент управление передается следующему за ЧИТАТЬ предложению. Логически обработка не должна продолжаться, если встретился конец файла, поэтому необходимо до ее выполнения проверить состояние индикатора конца файла. [33]
![]() |
Использование аргументов командной строки. [34] |
Данная командная строка показывает, что файл input будет скопирован в файл output. Во время выполнения программы, если arge не равен 3 ( сору считается одним из аргументов), она выдает сообщение об ошибке и завершается. Второй и третий аргументы командной строки воспринимаются программой в качестве имен файлов. Файлы открываются при помощи функции fopen. В случае успешного открытия файлов символы считываются из input и записываются в output до тех пор, пока для файла input не будет установлен индикатор конца файла. После этого программа завершается. [35]
Рассмотрим теперь примеры, показывающие, как пользоваться структурами в типичных ситуациях. Традиционно для этого применяется конструкция В КОНЦЕ предложения ЧИТАТЬ, в которой указан переход к программе обработки конца файла. При структурном программировании это следует переписать так, чтобы управление передавалось только вперед и параграф, содержащий ЧИТАТЬ, имел только один выход. Таким образом, даже при окончании файла управление должно передаваться следующему предложению. Поэтому нужен индикатор конца файла. [36]