[fa.info-vax] Reading Logfiles that are currently write-open

info-vax@ucbvax.ARPA (07/20/85)

From: <#D15%DDATHD21.BITNET@WISCVM.ARPA>

Hi Don,

   Kevin is right, you can share variable-lenghts, sequential
files. There are no problems if you have only one WRITER and one or
more READERS. There are problems if you need more than one WRITER,
because there is no record-locking on sequential files.

All you have to do in the first case, is to ensure that the RMS
buffers are really written to disk. For this purpose you can use the
SYS$FLUSH service. The following FORTRAN-77 program (Hi Kevin, I
do my system programming in FORTRAN...) shows how to prepare a
file for sharing. When the program is running you will have no
problem to TYPE or COPY the file TEST.DAT .

      PROGRAM Share_Test
      INTEGER I,J,FOR$RAB,SYS$SHARE,STATUS
C
      OPEN(UNIT=1,FILE='TEST.DAT',STATUS='NEW',SHARED) ! Open File
      I = FOR$RAB(1)                     ! Get RAB-Adress
      J = 0                              ! Init Counter
C
      DO WHILE (.TRUE.)                  ! Infinite Loop
        WRITE(1,*) ' TEST',J             ! Write File
        J = J + 1                        ! Update Counter
        IF(J.GT.100) THEN                ! Time to Update File
          J = 0
          STATUS = SYS$FLUSH(%VAL(I))    ! Update File if necessary
          IF(.NOT.STATUS) CALL SYS$EXIT(%VAL(STATUS)) ! Exit on Error
        END IF
      END DO
      END

info-vax@ucbvax.ARPA (07/20/85)

From: <#D15%DDATHD21.BITNET@WISCVM.ARPA>

Hi Don,

   forget my firts program. There is an error in the declaration
of the variables and procedures. Here is the correct source:

      PROGRAM Share_Test
      IMPLICIT NONE
      INTEGER I,J,FOR$RAB,SYS$FLUSH,STATUS,SYS$EXIT
C
      OPEN(UNIT=1,FILE='TEST.DAT',STATUS='NEW',SHARED) ! Open File
      I = FOR$RAB(1)                     ! Get RAB-Adress
      J = 0                              ! Init Counter
C
      DO WHILE (.TRUE.)                  ! Infinite Loop
        WRITE(1,*) ' TEST',J             ! Write File
        J = J + 1                        ! Update Counter
        IF(J.GT.100) THEN                ! Time to Update File
          J = 0
          STATUS = SYS$FLUSH(%VAL(I))    ! Update File if necessary
          IF(.NOT.STATUS) CALL SYS$EXIT(%VAL(STATUS)) ! Exit on Error
        END IF
      END DO
      END