next up previous contents
След.: Функции для работы с Выше: Стандартные процедуры и модули Пред.: Стандартные процедуры и модули   Содержание


Взаимодействие с системой

В стандарт Fortran-2003[15,3] добавлены средства взаимодействия с операционной системой: доступ к переменным окружения и параметрам командной строки, а в Fortran-2008 эти средства были расширены, в частности -- добавлена возможность передавать операционной системе команды. Доступ к системному времени и дате присутствовал в Стандарте и раньше. Встроенные процедуры:

COMMAND_ARGUMENT_COUNT()

Функция, возвращает (целое) число аргументов командной строки, параметров не имеет; значение ноль соответствует отсутствию аргументов (они не указаны или не поддерживаются системой); вызов программы в число аргументов не входит.

GET_COMMAND([COMMAND,LENGTH,STATUS])

Подпрограмма, возвращает команду, которая вызывала программу. Аргументы (все необязательные, все исходящие): COMMAND -- строковая переменная, которой присваивается команда, вызвавшая программу (INTENT(OUT)), или пробелы, если команду узнать невозможно; LENGTH -- целая переменная, которой присваивается длина команды в символах (ноль, если команду узнать невозможно); STATUS -- целая переменная, которой присваивается значение $ -1$ , если длина COMMAND недостаточна для помещения в нее команды, ноль в случае успеха и положительное зависящее от системы число в случае тех или иных ошибок (статус операции).

GET_COMMAND_ARGUMENT(NUMBER[,VALUE,LENGTH,STATUS])

Подпрограмма, возвращает аргумент командной строки. Параметры: NUMBER -- целочисленный входящий номер запрашиваемого аргумента командной строки; допустимы любые значения, но не отвечающие никакому аргументу приводят к ошибочному статусу; значение 0 означает имя самой программы.

VALUE -- строковая переменная, исходящий необязательный параметр; содержит сам аргумент командной строки или пробелы, если получить его не удалось.

LENGTH -- целая переменная (исходящий необязательный параметр), которой присваивается длина команды в символах (ноль, если команду узнать невозможно).

STATUS -- целая переменная (исходящий необязательный параметр), которой присваивается значение $ -1$ , если VALUE присутствует и его длина недостаточна, ноль в случае успеха и положительное зависящее от системы число в случае ошибок (статус операции). Причиной ошибки может быть отрицательное или превосходящее значение COMMAND_ARGUMENT_COUNT() значение NUMBER.

GET_ENVIRONMENT_VARIABLE(NAME[,VALUE,LENGTH,STATUS,TRIM_NAME])

Подпрограмма, позволяет узнать значение переменной окружения. Опишем параметры. NAME -- строка, входящий параметр, задает имя переменной окружения (чувствительность к регистру зависит от системы). VALUE -- строка, исходящий необязательный параметр, содержит значение указанной переменной окружения или пробелы в случае, если переменная не существует, не имеет значения или переменные окружения не поддерживаются системой. LENGTH -- целая переменная, исходящий необязательный параметр, равна длине значения переменной окружения или нулю, если переменная отсутствует или не имеет значения. STATUS -- целая переменная, исходящий необязательный параметр, равна $ -1$ , если VALUE присутствует и его длина недостаточна, ноль при успехе, $ 1$ , если переменная не существует и $ 2$ , если система не поддерживает переменные окружения. Возможны большие значения в случае других ошибок, но стандарт их не предписывает. TRIM_NAME -- логический входящий необязательный параметр; определяет, нужно ли отсекать пробелы перед значением, если они есть.

EXECUTE_COMMAND_LINE(COMMAND,[WAIT,EXITSTATS,CMDSTAT,CMDMSG])

Подпрограмма, позволяющая отдать команду операционной системе. Параметры: COMMAND -- строковой входящий параметр, содержащий команду. Интерпретация команды зависит от системы. WAIT -- необязательный входящий логический параметр. Если присутствует, имеет ложное значение и система поддерживает асинхронное выполнение команды, команда выполняется асинхронно; в противном случае подпрограмма завершается после выполнения команды (то есть команда выполняется синхронно). EXITSTAT -- целый необязательный параметр. Если команда выполняется синхронно, он получает зависящий от системы статус возврата. В противном случае не меняется. CMDSTAT -- целый исходящий необязательный параметр. Получает значение $ -1$ , если система не поддерживает командную строку, положительное значение (зависящее от системы) в случае ошибок, значение $ -2$ если, ошибок нет, WAIT задан ложным, но система не поддерживает асинхронное выполнение команд, и нуль в остальных случаях. Если параметру присваивается ненулевое значение, а он опущен, программа аварийно закрывается. CMDMSG -- строковой необязательный параметр. Получает зависящее от системы сообщение об ошибке, если ошибки не было, остается неизменным.

CPU_TIME(TIME)

Подпрограмма, возвращает процессорное время. Аргумент -- исходящий, типа REAL, получает процессорное время в секундах. Если время определить невозможно, возвращается отрицательное значение, зависящее от системы. Эта подпрограмма удобна для замера времени выполнения фрагментов кода (в этом ее предназначение).

SYSTEM_CLOCK([COUNT,COUNT_RATE,COUNT_MAX])

Подпрограмма, запрашивающая системное время. Аргументы -- все необязательные и исходящие. COUNT -- целая переменная, получающая значение (зависящее от системы), связанное со значением системных часов. Это значение должно увеличиваться на единицу при каждом такте часов вплоть до достижения значения COUNT_MAX, после чего сбрасываться в ноль. Если часов нет, значение отрицательное (указанное в стандарте). Параметр COUNT_RATE -- целая или вещественная переменная, содержащая зависящее от системы приближение числа тактов системных часов в секунду или ноль, если часов нет. COUNT_MAX -- целая переменная, содержащая максимальное число тактов часов или ноль, если их нет.

DATE_AND_TIME[DATE,TIME,ZONE,VALUES])

Подпрограмма, возвращает системные дату и время. Аргументы все необязательные и исходящие: DATE -- строка, ей присваивается значение в форме $ CCYYMMDD$ , где $ CC$ -- век, $ YY$ -- год в столетии, $ MM$ -- месяц в году и $ DD$ -- день месяца, или пробелы, если дату узнать не удалось; TIME -- строка, получает значение в форме $ hhmmss.sss$ , где $ hh$ -- час в сутках, $ mm$ -- минута часа, $ ss.sss$ -- секунды и миллисекунды минуты, или пробелы, если время узнать не удалось; ZONE -- строка, получает значение в форме $ \pm hhmm$ , где $ hh$ и $ mm$ определяют разницу во времени между временем UTC и системным времени в часах и минутах соответственно, или пробелы, если время узнать не удалось; VALUES -- целочисленный массив ранга один размера не менее восьми. Значения этого массива таковы (по порядку индексов): год, включая столетие; месяц года; день месяца; разницу во времени с UTC в минутах; час дня от 0 до $ 23$ ; минуту часа от 0 до $ 59$ ; секунду минуты от 0 до $ 60$ ; миллисекунду секунды от 0 до $ 999$ .

Поведение всех этих процедур на образах, отличных от первого, зависит от системы.



Ilya A. Chernov 2012-12-19
X