|
» |
|
|
|
Ask the Wizard Questions
DCL: /SINCE and /BEFORE problems with opened files
The Question is:
A problem using /BEFORE/SINCE filters:
I have a program which continuously writes data to a text file.
Each 8 hours, the file is closed, and a new one is opened. The
files have the same base name, but the date is coded in the
file name extension. I want to copy the files to another VAX node
as they are closed, using a batch job. Using the following
command:
$PRINT/SINCE=-8/BEFORE=-1 FILE_NAME NODE_2::*
The closed file is properly copied, but the command also tries
to copy the file just opened. The command bombs out, because
my program has the open file locked. I though that the
/BEFORE=-1 should filer out files created within the last hour.
The following command:
$DIR/SINCE=-9/BEFORE=-1 FILE_NAME
gives the expected result, reporting only the file created 8 hours
ago, an not the file created a few minutes ago.
What am I doing wrong?
The Answer is:
Nothing. Just an unfortunate implementation detail.
Most VMS utilities use a common set of routine to deal
with file selection qualifiers such as /before and /exclu
That package use RMS to get dates filled in through an OPEN.
As you, and others, found out, that open can fail if the
file is currently opened dis-allowing others.
Directory, being more intimate with file headers and such,
will uses a direct ACP QIO to get file attibutes with an
option to ignore the file access lock.
Suggestions:
- Teach the procedure to ignore the error:
$ON ERROR
:
$IF $STATUS .EQ...
- Use directory to build a list of file to copy:
$DIR/SINCE=-8/BEFORE=-1/NOHEAD/NOTRAIL ....
- Have the application change filenames after the close.
|