12.2. Физические файлы в MS-DOS
Что такое физические файлы? Ответ на этот вопрос лучше искать не в руководствах по Турбо Паскалю, а в описаниях MS-DOS. Все, что является файлом в MS-DOS, является физическим файлом в Турбо Паскале. Банальный пример — файл с данными на диске (гибком, жестком, виртуальном — все равно). Определяется физический файл строкой с его названием (именем). В Турбо Паскале имена могут быть строковыми константами или храниться в строковых переменных. Имя файла на диске может иметь адресную часть, оформленную в соответствии с правилами MS-DOS:
'C:PASTESTFILE.PAS' ,
'A:TEST.TXT'
'..PRIMER.BAS'
Другая разновидность физических файлов — это устройства MS-DOS. MS-DOS не делает особого различия между «традиционными» файлами и устройствами (портами коммуникаций). Устройства имеют свои фиксированные имена и во многом схожи с файлами: имя устройства, например, может встать на место имени файла на диске при копировании. Имена устройств
- 222 -
MS-DOS и необходимые замечания по ним сведены в табл. 12.1.
Таблица 12.1
Имя
Расшифровка устройства
Примечание
CON
Консоль (клавиатура и экран)
Ввод из CON — это чтение с клавиатуры, а вывод в CON — это запись на экран
LPT1 LPT2 LPT3
Параллельные порты (типа Centronix) номер 1…3 (если установлены)
Через эти имена файлов происходит вывод данных на принтеры или другие устройства с интерфейсом типа Centronix
PRN
Принтер. Синоним имени LPT1
Имя обращения к принтеру, включенному в порт LPT1
COM1 COM2
Последовательные порты (типа RS-232) номер 1..2 (если установлены)
Имена файлов-устройств для ввода-вывода данных через серийные порты коммуникации.
AUX
Синоним имени COM1
Файл-устройство COM1
NUL
Фиктивное устройство
Это бездонный файл, принимающий что угодно, но всегда пустой
Физические файлы-устройства организуются как текстовые файлы, и для нормальной работы их надо связывать с текстовыми логическими файлами. Хотя, если понадобится, можно устанавливать связь и с бестиповымн файлами (например, при работе с 'COM1' или 'COM2').
Как видно из табл. 12.1, у устройства есть свои особенности. Например, 'CON' — одно имя двух устройств. Если логический файл, которому назначено устройство 'CON', открывается для чтения, то в действительности он связывается с клавиатурой, но если для записи, то — с экраном! В то же время 'LPT1'...'LPT3', 'PRN', а с ним и 'NUL', могут быть открыты только для записи в них, а если все же они открыты для чтения, то сразу же возвращают признак конца файла. Никакого сбоя при этом не будет. Серийные порты — двусторонние. Позволяют считывать из себя и принимать данные. «Файл-пустышка» 'NUL' нужен для отладки программ, использующих другие порты.
Имена физических файлов-устройств должны быть записаны так же, как и в таблице: без точек и прочих знаков после них. Регистр букв роли не играет: 'CON', 'con' — консоль, 'PRN' — принтер, но
- 223 -
'CON.' — это файл на текущем диске, с именем CON и пустым расширением. Можно приписывать после имени устройства двоеточие, но лучше обходится без этого. Так, 'PRN' и 'PRN:' — это одно и то же.
Не определена такая структура данных, как файл в памяти ПЭВМ. Любой объявленный логический файл имеет смысл только после связи с внешним физическим файлом.
Турбо Паскаль позволяет программировать собственные механизмы для работы с периферией ПЭВМ или виртуальными устройствами — так называемые драйверы текстовых устройств. Но для этого надо вручную переписать почти всю библиотеку процедур работы с файлами. Заинтересованные читатели могут найти нужную им информацию в справочном руководстве по Турбо Паскалю [2].