progress-4gl
OS-утилиты
Поиск…
Вступление
Существует несколько встроенных функций и инструкций для доступа к операционной системе.
OS-КОМАНДА
Выполняет команду OS.
OS-COMMAND без каких-либо параметров запустит новую оболочку, а не выйдет из нее - таким образом вы будете на графической ОС: es оставить окно «висит».
DEFINE VARIABLE cmd AS CHARACTER NO-UNDO.
cmd = "dir".
OS-COMMAND VALUE(cmd).
Существует три варианта: SILENT
, NO-WAIT
и NO-CONSOLE
.
SILENT
После обработки команды операционной системы оболочка AVM приостанавливается. Чтобы выйти из окна на платформах графического интерфейса Windows, вы должны ввести exit. Чтобы выйти из окна на платформах символов Windows, вы должны ввести exit и нажать RETURN или ПРОБЕЛ. Вы можете использовать параметр SILENT для устранения этой паузы. Используйте этот параметр, только если вы уверены, что программа, команда или командный файл не генерируют никакого вывода на экран. Не может использоваться с NO-WAIT.
OS-COMMAND SILENT VALUE("runprogram.exe").
НЕТ, ПОДОЖДИТЕ
В многозадачной среде AVM немедленно передает управление обратно в следующий оператор после OS-COMMAND, не дожидаясь завершения команды операционной системы. Нельзя использовать с SILENT. Этот параметр поддерживается только в Windows.
OS-COMMAND NO-WAIT VALUE("DIR > dirfile.txt").
В Linux / Unix вам нужно будет это сделать, следуя команде с помощью &
-sign вместо:
OS-COMMAND VALUE("ls >> file.txt &").
НЕТ-КОНСОЛЬ
При обработке команды операционной системы AVM создает окно консоли. Окно консоли не может быть очищено после выполнения команды. Вы можете использовать опцию NO-CONSOLE, чтобы предотвратить создание этого окна в первую очередь.
OS-COMMAND NO-CONSOLE VALUE("startbach.bat").
Никакие ошибки не возвращаются из OS-COMMAND
в Progress ABL, поэтому вам придется проверять наличие ошибок другим способом, возможно, записывая их в файл в shell-скрипте или аналогичном.
OPSYS
Функция OPSYS
возвращает ту ОС, на которой запущена программа:
MESSAGE OPSYS VIEW-AS ALERT-BOX.
Результат:
Его можно использовать для выбора того, какую утилиту для ОС вызывать:
IF OPSYS = "LINUX" THEN
OS-COMMAND VALUE("ls -l").
ELSE
OS-COMMAND VALUE("dir").
OS-ОШИБКА
Возвращает ошибку из предыдущего вызова OS-*
представленного целым числом. Вызовы, которые могут вернуть OS-ERROR:
- OS-APPEND
- OS-COPY
- OS-CREATE-DIR
- OS-DELETE
- OS-ПЕРЕИМЕНОВАТЬ
- SAVE CACHE
Обратите внимание, что OS-COMMAND
отсутствует. Вам нужно обрабатывать ошибки в OS-COMMAND самостоятельно.
Номер ошибки | Описание |
---|---|
0 | Нет ошибок |
1 | Не владелец |
2 | Данный файл или каталог отсутствует |
3 | Прерванный системный вызов |
4 | Ошибка ввода-вывода |
5 | Плохой номер файла |
6 | Нет процессов |
7 | Недостаточно памяти ядра |
8 | Доступ запрещен |
9 | Плохой адрес |
10 | Файл существует |
11 | Нет такого устройства |
12 | Не каталог |
13 | Это каталог |
14 | Переполнение таблицы файлов |
15 | Слишком много открытых файлов |
16 | Файл слишком большой |
17 | Не осталось свободного места на устройстве |
18 | Каталог не пуст |
999 | Unmapped error (ABL default) |
Функция OS-GETENV
Возвращает значение любой переменной среды ОС.
MESSAGE OS-GETENV ("OS") VIEW-AS ALERT-BOX.
На компьютере с Windows:
MESSAGE OS-GETENV ("SHELL") VIEW-AS ALERT-BOX.
Результат на машине Linux с Bash в качестве текущей оболочки:
┌────── Message ───────┐
│ /bin/bash │
│ ──────────────────── │
│ <OK> │
└──────────────────────┘
OS-COPY
Скопировать файл
Целевой файл источника исходного файла COPY
Скопируйте c:\temp\source-file.txt
в c:\temp\target-file.txt
. Вам нужно проверить OS-ERROR
предмет успеха или его отсутствия.
OS-COPY VALUE("c:\temp\source-file.txt") VALUE("c:\temp\target-file.txt").
IF OS-ERROR <> 0 THEN DO:
MESSAGE "An error occured" VIEW-AS ALERT-BOX ERROR.
END.
OS-DELETE
Удаляет файл или файл-дерево.
Как и во многих других утилитах OS- *, вы должны проверить статус в OS-ERROR
.
OS-DELETE file-or-dir-to-delete [RECURSIVE]
Удалить все дерево /tmp/dir
:
OS-DELETE VALUE("/tmp/dir") RECURSIVE.
Удалите файл c:\dir\file.txt
OS-DELETE VALUE("c:\dir\file.txt").
OS-CREATE-DIR
Создает каталог, статус находится в OS-ERROR
Каталог ОС-CREATE-DIR
Создайте каталог под названием /usr/local/appData
OS-CREATE-DIR VALUE("/usr/local/appData").
OS-APPEND
Добавьте один файл в другой. Статус проверяется в OS-ERROR
Целевая задача источника ОС-APPEND
Дописывает targetfile.txt
с sourcefile.txt
:
OS-APPEND VALUE("sourcefile.txt") VALUE("targetfile.txt").
OS-ПЕРЕИМЕНОВАТЬ
Переименуйте файл или каталог. Состояние находится в OS-ERROR
. Может также использоваться для перемещения файлов (или перемещения и переименования).
OS-RENAME имя_файла newname
Переименовать /tmp/old-name
в /tmp/new-name
:
OS-RENAME VALUE("/tmp/old-name") VALUE("/tmp/new-name").
Переместите файл c:\temp\old.txt
в c:\new-dir\old.txt
:
OS-RENAME VALUE("c:\temp\old.txt") VALUE("c:\new-dir\old.txt").
OS-DRIVES (только для Windows)
Возвращает список всех дисков в системе.
MESSAGE OS-DRIVES VIEW-AS ALERT-BOX.
Результат с четырьмя дисками, C через F:
В Linux список будет просто пустым, так как там по определению нет подключенных «дисков». Списки каталогов выполняются по-другому ( INPUT FROM OS-DIR
)