HP OpenVMS Systems

ask the wizard
Content starts here

RMS shared file access in C++?

» close window

The Question is:

 
For OpenVMS DEC C++ 5.6 for VAX and DEC C++ 6.0 for ALPHA, using the CXX
compiler,  we want to have multiple processes write to a common log file
using standard cerr <<...  The answer to question 2867 about shared log
files was teasing, but I cant see how
 to get there from C++.
 
What is the C++ class interface to RMS?  I want to say something like the
'regular' C
fp = fopen( fn, "w", "shr=get,put,upd", "rat=cr", "rfm=var", "etx=rec");
 
and all I can find in the Alpha C++ on line class reference manuals is a
member function that takes a third integer, for example:
 
ofstream( const char* name, int mode, int prot ); where prot defaults to
openprot=0644 which is owner read write, group and world read.
 


The Answer is :

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
#include <fstream.hxx>
#include <iostream.hxx>
 
main ()
  {
  fstream outfile;
  int fd, pid = getpid();
 
  fd = open("fstream.log", O_CREAT|O_RDWR|O_APPEND, 0,
            "ctx=rec", "shr=get,put,upd");
  if ( fd == -1 )
    {
    // trap errors...
    perror("open");
    exit(EXIT_FAILURE);
    }
 
  outfile.attach(fd);
 
  if (outfile.fail())
    cout << "Failed to open the file" << endl;
 
  for (int i = 0; i < 1000; ++i)
    outfile << i << ": One line for the file from: " << pid << endl;
 
  if (outfile.good())
    cout << "No problem writing to file" << endl;
 
  exit(EXIT_SUCCESS);
  }
 

answer written or last revised on ( 15-OCT-1999 )

» close window