![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: When using the DIFFERENCES command to compare files, I run into a limitation that I have not been able to find documented. Some of the files contain records as much as 700 bytes in length. This causes the following error message to display: -RMS-W-RTB, 700 byte record too large for user's buffer. Is this limitation inherent to the way DIFFERENCES works, or is there a system/user setting that could be modified to handle these long records? The Answer is : The DIFFERENCES utility -- like many other older OpenVMS tools -- has a relatively small default record buffer specified, but will allocate a large buffer based on the attributes of the target files. Notably, DIFFERENCES will use the 'longest record length' setting associated with the target file. Some files -- notably stream files imported from other operating systems -- may not have that value set, or may have the value set incorrectly. You can verify the value with the DCL commands: $ DIRECTORY/FULL and $ WRITE SYS$OUTPUT F$FILE(file-name,"LRL") You can alter the value with the DCL command: $ SET FILE/ATTRIBUTES=LRL=nnn For example: $ copy a.tmp b.tmp $ set file/attributes=(mrs=0,lrl=0) a.tmp $ differences a.tmp b.tmp %DIFF-F-READERR, error reading A.TMP;1 -RMS-W-RTB, 888 byte record too large for user's buffer $ set file/attributes=(mrs=0,lrl=1000) a.tmp $ differences a.tmp b.tmp Number of difference sections found: 0 Number of difference records found: 0 $ write sys$output f$file("a.tmp","LRL") 1000 Bonus question: Why do some files with larger records and with incorrect LRL settings appear to work correctly? Answer: several OpenVMS utilities request direct use of the record from within the RMS I/O buffer (default size: eight kilobytes). If the record fits entirely within one RMS buffer, then the utility can process the data directly from within the buffer. If the record spans a buffer boundary, then the record buffer can be used.
|