Язык процедур 2-REXX для OS-2


STREAM


Функция STREAM в качестве результата возвращает описание потока символов с указанным именем, либо результат выполнения над потоком некоторой операции. Эта функция используется для получения информации о состоянии вводного или выводного потока, либо для выполнения некоторых специфических операций над потоком.

Первый аргумент имя определяет поток, к которому нужно получить доступ. В качестве второго аргумента может быть указана одна из следующих строк (при этом значащей будет только первая заглавная буква), описывающая действие, которое нужно выполнить:

Command операция (указываемая в качестве третьего аргумента команда-потока), которая должна быть применена к выбранному вводному или выводному потоку. Возвращенная результирующая строка зависит от выполненной команды и может быть пустой строкой.
Description     Возвращает текущее состояние указанного потока. Функция STREAM с данным режимом идентична операции State, за исключением того, что после возвращенной строки следует двоеточие и дополнительная информация о состояниях ERROR или NOTREADY, если она доступна.
State     Возвращает строку, которая описывает текущее состояние указанного потока. Этот режим принимается по умолчанию.

Функция STREAM, используемая с режимом State, возвращает одну из следующих строк:



'ERROR'     Над потоком была произведена операция, которая привела к возникновению ошибки (возможно, в процессе ввода, вывода или выполнения самой функции STREAM). Дополнительную информацию об ошибке можно получить с помощью функции STREAM с запросом на описание, зависящее от среды применения.
'NOTREADY'     Поток находится в состоянии, при котором любая попытка выполнить стандартную операцию ввода-вывода приводит к формированию условия NOTREADY. Например, простой вводной поток может иметь определенную длину; попытка чтения из этого потока (с помощью встроенных функций CHARIN или LINEIN) сверх указанной длины может сделать поток недоступным до тех пор, пока он не будет закрыт (с помощью функции LINEIN(имя), например), а затем открыт повторно.
'READY'     Поток находится в состоянии, при котором допустима любая стандартная операция ввода-вывода. Это обычное состояние для потока, хотя при этом не гарантируется, что любая конкретная операция будет выполнена успешно.
'UNKNOWN'     Состояние потока неизвестно. В среде OS/2 и ее прикладных программах это обычно означает, что поток закрыт (или еще не открывался). Однако данный ответ может означать в других средах, что состояние потока невозможно определить.
<
Прим.    Состояние ( и выбранный режим) вводного или выводного потока является глoбальным для программы REXX, в которой оно не сохраняется и не восстанавливается при обращении к функциям и подпрограммам (включая и те, которые вызваны для отслеживания событий по CALL ON).
Команды потока

Обычно используются следующие команды потока:
  • Открыть поток для чтения или записи
  • Закрыть поток после выполнения операции
  • Установить позицию чтения или записи внутри устойчивого потока (например, файла)
  • Получить информацию о потоке (его существовании, размере и дате последнего изменения).


Если Вы указали режим С (команда), то должен использоваться и аргумент команда-потока. Синтаксис при этом будет следующим:



Функция STREAM, используемая в такой форме, сама возвращает строку, соответствующую указанной команде-потока, если эта команда завершилась успешно. Если же команда завершилась неуспешно, то функция STREAM возвращает строку с сообщением об ошибке в такой же форме, как и при выборе режима D (Описание).

Командные строки - Аргумент команда-потока может быть любым выражением, которое в процессе вычислений приводится языком REXX к одной из следующих командных строк:
'OPEN'     Открывает поименованный поток. По умолчанию команда OPEN открывает поток как для чтения, так и для записи данных. Для того, чтобы указать конкретную операцию, которую нужно выполнить над потоком с указанным именем, добавьте в командную строку слово READ (если требуется только чтение из потока) или WRITE (если требуется только запись в поток).

Функция STREAM сама возвращает строку 'READY', если указанный поименованный поток успешно открыт, или соответствующее сообщение об ошибке в случае неуспешного открытия.

Примеры: stream(strout,'c','open') stream(strout,'c','open write') stream(strinp,'c','open read')
'CLOSE'     Закрывает поименованный поток. Функция STREAM сама возвращает строку 'READY', если указанный поименованный поток успешно закрыт, или соответствующее сообщение об ошибке в противном случае.


Если была сделана попытка закрыть неоткрытый файл, то функция STREAM() возвратит пустую строку ("").

Пример: stream('STRM.TXT','c','close')
'SEEK' смещение     Устанавливает внутри устойчивого потока позицию чтения или записи в соответствии с указанным числом (смещение).

Прим.    В операционной системе OS/2 позиция чтения и записи одна и та же. Чтобы использовать данную команду, откройте сначала поименованный поток с помощью команды потока 'OPEN', описанной выше.
Перед числом, определяющим смещение, должен быть указан один из следующих символов:
  =   Явно указывает смещение от начала потока. Это значение принимается по умолчанию, если перед смещением префикс не указан вообще.
  <   Указывает смещение от конца потока.
  +   Указывает смещение, отсчитываемое в направлении конца потока от текущей позиции чтения или записи.
  -   Указывает смещение, отсчитываемое в направлении начала потока от текущей позиции чтения или записи.
Функция STREAM сама возвращает новую позицию в потоке, если требуемая позиция чтения или записи успешно определена; в противном случае на экран выводится сообщение об ошибке.

Примеры: stream(name,'c','seek =2') stream(name,'c','seek +15') stream(name,'c','seek -7') fromend = 125 stream(name,'c','seek <'fromend)
Используемая с командами потока, описанными ниже, функция STREAM возвращает специальную информацию о потоке. stream('..\file.txt','c','query datetime')
'QUERY EXISTS'     Возвращает полную спецификацию пути поименованного потока, если он существует, и пустую строку в противном случае. stream('..\file.txt','c','query exists')
'QUERY SIZE'     Возвращает размер устойчивого потока в байтах. stream('..\file.txt','c','query size')
'QUERY DATETIME'     Возвращает отметку даты и времени указанного потока.



Содержание раздела