Приложение B. Параметры времени исполнения
В начало страницы
Поведение исполнительной библиотеки LF95 может модифицироваться во время
исполнения с помощью совокупности команд, которые вызываются через командную
строку при запуске исполнимой программы или посредством переменных окружения
оболочки. Их действия могут изменить поведение операций ввода/вывода, выдачу
диагностик и операции с плавающей точкой.
Параметры времени исполнения, задаваемые из командной строки, указываются
посредством последовательностей символов, однозначно идентифицирующих
параметры времени исполнения, так что их можно отличить от обычных аргументов
в командной строке, используемых программой пользователя. В текущей версии
компилятора значения, полученные через функции GETCL(), GETPARM() и GETARG()
могут включать параметры времени исполнения наряду с определенными
пользователем аргументами из командной строки. Это может создать
затруднения, если количество указанных параметров времени исполнения
все время меняется или не известно программисту. Решение этой проблемы
состоит в передаче параметров времени исполнения в переменную окружения
FORT90L (см. "Переменные окружения" на стр. 112).
В начало страницы
Параметры времени исполнения и параметры пользователей для своих программ
могут указываться как параметры команды на исполнение. Параметры времени
исполнения используют функции из исполнительной библиотеки LF95. Эти параметры
чувствительны к регистру. Формат этих параметров таков:
exe_file [-Wl,[парам. времени исп.]...] [аргументы программы пользователя]...
Здесь exe_file означает файл исполнительной программы пользователя. Цепочка
"-Wl," должна предшествовать любым параметрам времени исполнения, чтобы их
можно было отличить от аргументов программы пользователя. Заметим, что она
состоит из W, за которым следует буква L на нижнем регистре (не цифра 1).
Заметим также, что если какой-то параметр указан более одного раза с
разными аргументами, используется только последнее вхождение.
В начало страницы
Как альтернативу командной строке, можно использовать для указания параметров
времени исполнения переменную окружения FORT90L. Всякие параметры времени
исполнения, указанные в командной строке, комбинируются с теми, которые
указаны в FORT90L. Аргументы командной строки имеют приоритет перед
соответствующими параметрами, указанными в оболочечной переменной FORT90L.
Следующие примеры показывают, как использовать переменную оболочки FORT90L
(фактический смысл каждого параметра времени исполнения описан в следующем
ниже разделе).
Пример 1.
Установка значения переменной FORT90L и запуск программы:
setenv FORT90L=-Wl,-e99,-le
a.out -Wl,-m99 -myopt
действуют так же как и командная строка
a.out -Wl,-e99,-le,-m99 -myopt
В результате при исполнении программа a.out действуют параметры времени
исполнения -e99, -le, -m99 и определенный пользователем аргумент программы
-myopt.
Пример 2.
Если используется командные строки
setenv FORT90L=-Wl,-e10
a.out -Wl,-e99
то в результате a.out исполняется с параметром времени исполнения -e99,
подавляющим параметр -e10, указанный в переменной оболочки FORT90L.
Заметим, что setenv предыдущих примерах будет командой экспорта для
пользователей оболочки Korn and bash.
В начало страницы
В следующей таблице перечисляются возможные значения, возвращаемые
операционной системе исполнительной программой LF95 после окончания и выхода.
Они соответствуют уровням диагностических сообщений, которые могут быть
установлены различными параметрами времени исполнения.
Table 12: Обработка кодов возврата
.............................................................................
Код возврата Статус
.............................................................................
0 Ошибок нет или уровень I (информационное сообщение)
4 Ошибка уровня W (предупреждение)
8 Ошибка уровня E (средняя)
12 Ошибка уровня S (серьезная)
16 Обнаружена ошибка уровня U (серьезнее, чем уровни W, E, S
(Неисправимая ошибка)
240 Ненормальное завершение
Другие Принудительное завершение
..............................................................................
В начало страницы
Определяемые по умолчанию номера стандартных устройств ввода, вывода и ошибок
(их можно изменить соответствующими параметрами времени исполнения) для
исполнимой программы LF95 таковы:
Стандартный ввод: устройство номер 5,
Стандартный вывод: устройство номер 6,
Стандартный выход для ошибок: устройство номер 0.
В начало страницы
Эти параметры могут указываться как аргументы в командной строке или в
переменной оболочки FORT90L. В этом разделе объясняются формат и функции
параметров времени исполнения. Запомните, что все эти параметры чувствительны
к регистру. Формат их такой:
-Wl[,параметр][,параметр]...
Когда указывается такой параметр, цепочка "-Wl" (где l есть буква L на
нижнем регистре) необходима в начале списка параметров, которые разделяются
запятыми. Пробелы после запятой недопустимы. Если один и тот же параметр
указан дважды, используется последний из них.
Пример:
a.out -Wl,a,p10,x
В начало страницы
-C или -C[u_no]
Конвертирует формат IBM370 чисел с плавающей точкой. Параметр -C указывает,
как обрабатывать неформатированный файл с данными в формате IBM370 с
плавающей точкой, используя бесформатный оператор ввода/вывода. Когда указан
параметр -C, данные типов REAL и DOUBLE PRECISION из бесформатного
файла на устройстве с соответствующим номером рассматриваются как данные с
плавающей точкой формата IBM370 в бесформатном операторе ввода/вывода.
Необязательный argument u_no определяет целое в пределах от 0 до 2147483647
в качестве номера устройства. Если u_no опущен, параметр C действует для
всех номеров устройств, связанных с бесформатными файлами. Когда указанное
устройство связано с форматированным файлом, параметр для этого файла
игнорируется. Если параметр -C не указан, данные бесформатного файла,
связанного с устройством u_no, рассматриваются как формат IEEE для данных с
плавающей точкой в бесформатном операторе ввода /вывода.
Пример:
a.out -Wl,-C10
-M
Объявление ошибки при конвертировании мантиссы для данных IBM370.
Параметр -M определяет, выдавать ли диагностику (0147i-w), когда биты
мантиссы пропадают во время конверсии IBM370-IEEE-форматов для данных с
плавающей точкой. Если -M указан, диагностика выдается, если конверсия
форматов IBM370-IEEE приводит к потере битов мантиссы. Если -M опущено,
диагностическое сообщение (0147i-w) не выдается.
Пример:
a.out -Wl,-M
-Q
Заполнение пробелами при форматированном вводе. Параметр -Q подавляет
заполнение поля ввода пробелами, когда используется форматированный оператор
ввода для чтения записи Fortran (это свойство применяется в устройствах
со всеми номерами). Этот параметр действует в случаях, когда ширина поля,
необходимая в форматном операторе ввода, больше длины записи Fortran и файл
не был открыт оператором OPEN.
Результат получается таким же как если бы PAD= , указываемое в операторе
OPEN, было NO. Если параметр -Q опущен, входная запись пополняется
пробелами. Результат получается такой же как в случае если PAD= specifier
в операторе OPEN установлен на YES или PAD= specifier опущено.
Пример:
a.out -Wl,-Q
-Re
В начало страницы
Выключает обработчик динамических ошибок. Traceback, обзор ошибок , контроль
пользователя за ошибками посредством служебных рутин ERRSET и ERRSAV, и
выполнение пользовательского кода для обработки ошибок подавляются. Если
возможно, происходит стандартная обработка случившейся ошибки.
Пример:
a.out -Wl,-Re
-Rm:filename
В начало страницы
Параметр -Rm обеспечивает поступление в указанный файл следующей информации:
* Сообщения от операторов PAUSE или STOP
* Диагностические сообщения исполнительной библиотеки
* Traceback map
* Обзор ошибок
Пример:
a.out -Wl,-Rm:errors.txt
-Ry
В начало страницы
Запускает относящиеся к проблеме Y2K сообщения, генерируя диагностики уровня
i (информационные) при обнаружении кода, который может привести к конфликтам
после наступления года 2000 A.D. Должен использоваться вместе с параметром
-li для получения виртуального диагностического вывода.
Пример:
a.out -Wl,-Ry,-li
-T или -T[unit]
В начало страницы
Данные формы "Big-endian" (целые, логические и IEEE с плавающей точкой)
передаются бесформатным оператором ввода/вывода. Необязательный аргумент
unit определяет номер устройства в пределах от 0 до 2147483647, связанного с
бесформатным файлом. Если unit опущено, -T действует на устройства с любыми
номерами. По умолчанию LF95 читает и пишет численные данные (целые, логические
и IEEE с плавающей точкой ) как "little-endian" (начиная с младшего байта).
Пример:
a.out -Wl,-T10
-a
В начало страницы
Если указан параметр -a процесс аварийного завершения программы
принудительно выполняется после нормального завершения программы. Он происходит
непосредственно перед закрытием внешних файлов.
Пример:
a.out -Wl,-a
-d[num] 1 < num < 32767
В начало страницы
Параметр -d определяет размер рабочей области ввода/вывода, используемой
операторами ввода/вывода прямого доступа. Параметр -d увеличивает
производительность, когда данные читаются из или записываются в файл по
одной записи за раз в последовательности их номеров. Если параметр -d указан,
рабочая область указанного размера используется для всех устройств во время
исполнения.
Чтобы указать размер рабочей области для отдельных устройств, указывайте
количество записей Fortran в переменной оболочки fuunitbf, где устройство
указывается его номером (см. детали в "Переменные оболочки для ввода/вывода"
на стр. 119).
Если параметр -d и переменная оболочки указаны одновременно, приоритет
принадлежит параметру -d. Необязательный аргумент num указывает количество
записей Fortran в фиксированном блочном формате, включаемых в один блок.
Аргумент num должен быть целым в пределах от 1 до 32767. Чтобы получить
размер рабочей области ввода/вывода, нужно умножить num на значение,
указанное в RECL= specifier в операторе OPEN. Если файлы совместно
используются несколькими процессами, количество записей Fortran в одном
блоке должно быть единицей. Если параметр -d опущен, размер рабочей
области ввода/вывода есть четыре килобайта.
Пример:
a.out -Wl,-d8
-e[num] 0 < num < 32767
В начало страницы
Параметр -e управляет окончанием выполнения на основании общего количества
ошибок при исполнении. Необязательный аргумент num определяет предел как
целое от 0 до 32767. Если num больше или равен 1, исполнение прекращается,
когда общее количество ошибок достигнет предела. Если параметр -e опущен или
num равен 0, исполнение не прерывается по количеству ошибок. Однако,
исполнение программы прекращается, если достигнут предел количества ошибок,
установленный системой Fortran.
Пример:
a.out -Wl,e10
-g[num] 1 < num
Рабочая область ввода/вывода при последовательном доступе
Параметр -g устанавливает размер рабочей области ввода/вывода для операторов
ввода/вывода последовательного доступа. Этот размер устанавливается в
килобайтах для всех устройств на время исполнения. Аргумент num указывает
целое значение 1 или больше. Если -g опущено, по умолчанию размер равен 8
килобайтам.
Параметр -g улучшает производительность ввода/вывода, когда большое количество
данных читается или записывается в файлы посредством бесформатного
последовательного оператора ввода/вывода. Аргумент num используется как размер
рабочей области для всех устройств. Чтобы избежать чрезмерного расхода
памяти, указывайте размер рабочей области для отдельных устройств с помощью
переменной оболочки fuunitbf, где unit есть номер устройства (см. детали в
"Переменные оболочки для ввода/вывода на стр. 119). Когда параметр -g указан
одновременно в переменной fuunitbf, приоритетным является указание параметру
-g в команде на исполнение.
Пример:
a.out -Wl,-g10
-i
В начало страницы
Параметр -i управляет обработкой прерываний во время исполнения. Если он
указан, библиотека Fortran не участвует в обработке. Если параметр i не указан,
для обработки прерываний используется библиотека Fortran. Эти прерывания
таковы: переполнение в показателе, пропадание показателя, проверка деления,
целое переполнение. Если указан параметр -i, обработка исключительных случаев
не производится. Параметр -u не должен комбинироваться с параметром -i.
Пример:
a.out -Wl,-i
-lerrlevel errlevel: { i | w | e | s }
В начало страницы
Параметр -l (L на нижнем регистре) управляет выдачей диагностических
сообщений во время исполнения. Необязательный аргумент errlevel, указывающий
самый низкий уровень ошибок, i (информационный), w (warning (предупреждение)),
e (medium(средний)) или s (serious(серьезный)), сообщения о которых должны
выдаваться. Если -l не указан, выдаются диагностики уровней w, e и s.
Однако, сообщения после превышения лимита на печать не выдаются.
При указании -li выдаются диагностики всех уровней
При указании -lw выдаются диагностики уровней w, e, s и u.
При указании -le выдаются диагностики уровней e, s и u.
При указании -ls выдаются диагностики уровней s и u.
Пример:
a.out -Wl,-le
-munit 0 < unit < 2147483647
В начало страницы
Параметр -m определяет устройство с указанным номером как стандартный выход
(файл/устройство) для сообщений об ошибках (STDERR). Аргумент unit есть целое
от 0 до 2147483647. Если -m отсутствует, для вывода сообщений об ошибках
отводится файл на устройстве номер 0. Нужно заботиться об избежании
конфликтов между параметрами -p и -r. См. "Переменные оболочки для
ввода/вывода" на стр. 119..
Пример:
a.out -Wl,-m10
-n
В начало страницы
Параметр -n определяет, будут ли приглашения поступать на стандартный ввод
(STDIN). Если параметр -n указан, то приглашения выдаются, когда данные должны
поступать в исполняемую программу с помощью форматированного последовательного
операторов READ, включая управляемые списком и namelist операторы. Если
параметр -n option отсутствует, приглашения не генерируются, когда данные
должны поступать на стандартный ввод по форматированному последовательному
оператору READ.
Пример:
a.out -Wl,-n
-punit 0 < unit < 2147483647
В начало страницы
Параметр p связывает устройство с номером unit с стандартным выходным
файлом/устройством (STDOUT), unit есть целое в пределах от 0 до 2147483647.
Если p опущено, то по умолчания устройство номер 6 считается стандартным
выходом. Необходимо избегать конфликтов устройств, указанных в параметрах
-m и -r. Дальнейшие детали см. в "Переменные оболочки для ввода и вывода"
на стр.119.
Пример:
a.out -Wl,-p10
-q
Выделение верхним регистром символов для выходного числового редактирования.
Параметр -q option определяет изображение прописными буквами символов числового
редактирования E, EN, ES, D, Q, G, L и Z, которые выдаются форматированными
операторами вывода. Этот параметр также определяет верхний регистр для
изображения буквенных символов в символьных константах, употребляемых в
спецификаторах запросов (кроме спецификатора NAME) в операторе INQUIRE. Если
параметр -q указан, символы изображаются прописными буквами. Если параметр q
отсутствует, используется нижний регистр.
Пример:
a.out -Wl,-q
-runit 0 < unit < 2147483647
В начало страницы
Параметр -r связывает устройство с номером unit с стандартным входным
файлом/устройством (STDIN) на время исполнения программы. Номер unit должен
быть целым в диапазоне от 0 до 2147483647. Если параметр -r опущен, то
по умолчанию устройство номер 5 связывается с стандартным входным файлом.
Необходимо избегать конфликтов с устройствами, указанными в параметрах -m и
-p. Детали см. в "Переменные оболочки для ввода/вывода" на стр. 119.
Пример:
a.out -Wl,-r10
-u
В начало страницы
Если указан параметр -u, LF95 производит обработку прерываний по пропаданию
знаков в числах с плавающей точкой. Система может выдавать во время
исполнения диагностические сообщения 0012i-e. Если параметр -u опущен,
система игнорирует упомянутые прерывания и продолжает вычисления. Параметр
-i не должен комбинироваться с параметром -u.
Пример:
a.out -Wl,-u
-x
В начало страницы
Параметр -x определяет, игнорировать ли пробелы при числовом форматном
вводе данных или рассматривать их как нули. Если параметр -x указан, то
пробелы заменяются нулями во время редактирования чисел форматными
последовательными операторами ввода, для которых не выполнялся оператор OPEN.
Результат получается таким же, как в случае, когда BLANK= specifier в
операторе OPEN установлен на ZERO. Если параметр -x не был указан, то пробелы
в поле ввода рассматриваются как пустые данные и игнорируются. Результат
получается таким же, как если бы BLANK= specifier в операторе OPEN было
установлено на NULL или BLANK= specifier опущено.
Пример:
a.out -Wl,-x
В начало страницы
В этом разделе описываются переменные оболочки, которые управляют операциями
в файле ввода/вывода. Эти переменные окружения пишутся на нижнем регистре,
если не сказано противное.
fuunit = filename 00 < unit < 2147483647
Переменная оболочки fuunit связывает предварительно устройства
с файлами. Значение unit есть номер устройства (он должен состоять из не
менее чем двух цифр). filename есть имя файла, связанного с устройством с
номером unit. При этом надо избегать стандартных входного и выходного файлов
(fu05 и fu06) и файла ошибок (fu00), если только их имена не изменены
с помощью параметров -m, -p или or -r options, и тогда нужно избегать их
новых значений.
Следующий пример показывает, как связать myfile.dat с устройством номер 10
перед началом исполнения.
Пример:
setenv fu10 myfile.dat
fuunitbf size 00 < unit < 2147483647
Переменная оболочки fuunitbf определяет размер рабочей области ввода/вывода,
используемой операторами ввода/вывода при последовательном или прямом доступе.
Это относится и к форматным и к бесформатным файлам. Значение unit в
переменной оболочки fuunitbf определяет номер устройства (он должен состоять
по крайней мере, из двух цифр). Если аргумент size используется для устройств
ввода/вывода с последовательным доступом, он задается в килобайтах; для
устройств прямого доступа он указывается в записях. Он может иметь целые
значения, начиная с 1. Аргумент size, указанный для одного устройства, не
применяется автоматически для других устройств.
Если эта переменная и параметр -g опущены, размер рабочей области ввода/вывода,
используемой устройствами последовательного доступа, по умолчанию равен
8 килобайтам. Аргумент size для устройств ввода/вывода прямого доступа есть
количество записей Fortran в одном блоке при фиксированном блочном формате.
Он может быть целым в пределах от 1 до 32767. Если опущены эта переменная и
параметр -d, размер области составляет 4 килобайта.
Пример 1:
Устройства ввода/вывода последовательного доступа.
setenv fu10bf 64
Когда выполняются операторы ввода/вывода последовательного доступа для
устройства номер 10, операторы используют рабочую область в 64 килобайта.
Пример 2:
Устройства ввода/вывода прямого доступа.
setenv fu10bf 50
Когда выполняются операторы ввода/вывода прямого доступа для устройства
номер 10, количество записей Fortran в одном блоке есть 50. Размер
рабочей области ввода/вывода получается умножением 50 на значение, указанное
в RECL= specifier в операторе OPEN