![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: Summary Question: Any easy way to pass a logical to a detached process at processes startup time? Full question: Somewhere around openVMS alpha 6.something the default maximum record size and longest record size mechanisms were changed. Now, when I create a file, with no mrm (maximum record size) the file attributes are set to mrm or 0 and lrl (longest record size) of 32767. This breaks type/tail which requires an lrl of < 512. I have tried using set file/attributes=lrl=512 but the file can't be opened for the set file to take effect. I have tried defining decc$default_lrl to 511, which works in a test environment. The problem is that the application is a detached process, started from a command procedure (dcl) (run/detached.....). Setting a process logical, in the command file, is not picked up by the detached process. As you can tell, I am trying to address this without changing source code, if possible. So any way to pass a logical to a detached process, at startup. Also, why was this behavior (mrm=0, lrl=32767) introduced on alpha file creation, knowning or not knowing that it would break type/tail. Thank you, Jeffrey Wolf The Answer is : The C language does not particularly have a record-oriented syntax, and had been using a longest record length (LRL) value of zero. This has caused problems for tools that have looked at LRL for various purposes, as the longest record was normally longer than zero. With recent ECO kits and with V7.1 and later, the LRL value was set to 32767. Changing the value has, however, also created performance problems for SORT and other tools that are sensitive to the longest record length, as these can encounter performance problems with the (new) C LRL value due to increased storage requirements dictated by the larger LRL value. If you have control over the sources, simply use the appropriate RMS keywords in the fopen(), open(), or creat() call. (See the documentation of the creat() routine in the DEC C run-time library manual for details.) One can use a UIC group table to share the value of the logical name with the detached process, assuming the detached process executes "alone" in a particular UIC group. One could also use a detached process running DCL -- see the OpenVMS Frequently Asked Questions (FAQ) section "DCL1. How do I run a program with arguments?". The logical name definition can occur before the program is invoked. (This mechanism is common among C programs that use system() and other CLI-related calls -- these calls must execute under the control of a process with a CLI such as DCL loaded...)
|