![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: How can I redirect sys$output from within a C++ process. I have a process that generates a new output file for stdout (printf statements) each day. This is done with c/c++ freopen function. This works fine for the stdout assignment for printf statements. But the process also has a system call that submits a DCL com procedure to be executed. Basically as follows: system(StartFtpCmd) where the string StartFtpCmd is static char *StartFtpCmd = "Submit/Log=VISLFML:FMCOILLOGS_FTP.OUT/NoPrint VISU:FMLOGS.Com"; // used in system call When this com file is executed there is an entry made in the original/first process log file where the job is entered into a system que. This entry is always in the first log file that was opened when the process was first started. It looks like sys$outpu t is still writing to this original file (still has this file opened???) even though stdout is writing to another file (same name but different version number). Below is a sample of the output in the file that comes from the system call. Job FMLOGS (queue SYS$BATCH, entry 841) started on SYS$BATCH It looks to me like the process is able to control whare stdout goes but at the VMS system level I am not able to redirect sys$output for the process. VMS started the process with sys$output directed the original output file when the process started and d oing a call to freopen has no effect on sys$output. I tried a call to lib$set_logical(sys$output,&Logfile) but this did not seem to work either????????? I don't know if what I am asking is clear or not but I would appreciate some help with this. The Answer is : Once created and running, batch processes generally do not prefer that the target output log file be altered. The OpenVMS Wizard would strongly recommend the use of an explicitly-created and application-specific log file, rather than attempting to peridically redirect SYS$OUTPUT (stdout). This is far simpler, and far easier to maintain and to explain. For details on creating output files with RMS sharing enabled, please see the OpenVMS FAQ. The OpenVMS Wizard would encourage use of $sndjbc, and not the use of a lib$spawn of the SUBMIT command. There are FTP client APIs available for various platforms, and the OpenVMS Wizard expects that one of these has been ported to OpenVMS. (The FTP protocol is itself not particularly complex.) If you wish to use FTP from within DCL, please use COPY/FTP. Please upgrade to supported OpenVMS and TCP/IP Services and C++ releases, and please apply any available mandatory ECO kits for the products. Without details on exactly what the code involved is doing with the freopen and other logfile-related processing, the OpenVMS Wizard cannot determine exactly what is occuring here.
|