fortran получает информацию о системной среде в openvms

#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

Удачи, Хейн.