#fortran #openvms #system-information
#fortran #openvms #информация о системе
Вопрос:
Возможно ли получить информацию о системной среде на Fortran 90 (операционная система OpenVMS)? Я использую компилятор VSI Fortran V8.3-104957-50Q83. Я не буду реализовывать следующий C-код на Fortran
char *bind_addr= getenv("MYSQL_TEST_BINDADDR");
Комментарии:
1. Вы пробовали
getenv
, существует ли в вашем компиляторе? В Fortran 90 нет ничего стандартного, все зависит от компилятора, как и ваш предыдущий вопрос о аргументах командной строки.2. После проверки документации vmssoftware я не могу найти какое-либо расширение компилятора, которое позволяет извлекать переменные среды. Он также поддерживает только Fortran 90/95, а не 2003. У последнего есть подпрограмма
GET_ENVIRONMENT_VARIABLE
. Однако ваш компилятор не поддерживает Fortran 2003. Единственное предложение, которое я мог бы сделать, — это попытка вызвать C-функциюgetenv
непосредственно в Fortran, но это снова взлом, зависящий от компилятора.3. Взгляните на раздел 10.10 Руководства пользователя VSI Fortran для OpenVMS . В нем объясняется, как вы можете связать программу Fortran с самописной C-библиотекой. Таким образом, вы могли бы быстро написать оболочку для
getenv
на C и связать ее с Fortran в соответствии с процедурой, определенной в этом документе.
Ответ №1:
Этот раздел является одним из серии вопросов о том, что, по-видимому, является попыткой переноса приложения «C» на Fortran в OpenVMS. Чтобы предоставить наилучшие ответы, может помочь узнать немного больше информации — ПОЧЕМУ предпринимаются усилия, КАКОВА исходная платформа?
Тем не менее, переменные среды, как большинство из нас их знают, НЕ существуют как таковые в OpenVMS. СИМВОЛЫ DCL OpenVMS и ЛОГИЧЕСКИЕ ИМЕНА пользователей / групп / систем, которые могут и будут обрабатываться как переменные среды библиотеками поддержки, такими как доступные через C-RTL, Perl и Python.
Чтобы определить их, ожидается действие оболочки (DCL), выбирающее либо символы, либо логические имена в качестве средства. Зная этот механизм, приложение, которое будет перенесено, может просто захотеть вызвать собственные функции OpenVMS для получения или установки значений (SYS $ TRNLNM, LIB $ GET_SYMBOL, LIB $ SET_SYMBOL).
Написание собственной оболочки ‘my_getenv’ для вызова getenv, предоставленного C-RTL, может быть хорошим решением, если у вас есть доступ к компилятору C.
Другим обходным путем может быть обратный инжиниринг и вызов фактической функции поддержки C (вероятно, называемой DECC $ GETENV — не проверено!) для этого может потребоваться сначала вызвать некоторую инициализацию (опять же, не проверено)
Конечно, есть еще статьи об этом. Google? Для получения некоторой информации о символах и логике должны помочь документация и FAQ. Например — http://www.hoffmanlabs.org/vmsfaq/vmsfaq_012.html
Удачи, Хейн.