home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / os / vms / 17889 < prev    next >
Encoding:
Internet Message Format  |  1992-11-12  |  2.8 KB

  1. Path: sparky!uunet!europa.asd.contel.com!emory!wupost!cs.utexas.edu!sun-barr!ames!agate!ucbvax!EQL.CALTECH.EDU!rankin
  2. From: rankin@EQL.CALTECH.EDU (Pat Rankin)
  3. Newsgroups: comp.os.vms
  4. Subject: record format for directory files
  5. Message-ID: <921112192340.21c151eb@EQL.Caltech.Edu>
  6. Date: 13 Nov 92 03:34:16 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 40
  11.  
  12. > 1- I loaded a FOO.DIR file into TPU and looked at it.  It contains all
  13. >    the filenames in the directory FOO, plus some other information.  I am
  14. >    assuming this information is date/time, size, location on disk, etc.
  15. >    for each file in that directory.  Does anyone know what is the format
  16. >    for the records in FOO.DIR directory ?
  17.  
  18.      No, the extra stuff in those directory entries does not correspond
  19. to any of that type of data.  There is one record per filename (*).  It
  20. contains a record length (2 bytes used by RMS for all variable length
  21. records), a version limit (2 bytes; 32767 is the default and means no
  22. limit is enforced), a flags byte, a length byte 'n', then 'n' characters
  23. of the filename (name.type, including the period delimiter), then a NUL
  24. padding byte if 'n' happens to be odd, followed by 1 or more pairs of
  25. binary values:  version number (2 bytes) and file ID number (6 bytes).
  26. Each name is stored only once (*); when multiple versions of a file are
  27. present, only the version number and file ID is kept for the extra entries
  28. of that file name, ordered from high to low.  The number of versions
  29. present is derivable from the record length and filename length.
  30.  
  31.      A file ID number is used to compute an index into [000000]INDEXF.SYS
  32. for that disk.  That file contains file headers, which is where ownership,
  33. protection, and creation/modification/backup/expiration dates are stored,
  34. along with list of which disk blocks are allocated to each particular file.
  35. You can use ``DUMP/HEADER/BLOCK=COUNT=0 foo.bar'' to get a formatted list
  36. of a file's header (/block=count=0 is used to suppress getting the actual
  37. blocks of the file formatted along with it; /record=count=0 would work too).
  38. You can obtain that data in a program by using SYS$QIO[W] (see chapter 1
  39. in the _I/O_User's_Reference_Manual,_Part_I_); it's rather complicated.
  40.  
  41.      (*) There is an exception to the one record per filename rule when
  42. that name has so many versions that its <version,file-ID> pairs can't fit
  43. within a single disk block.  For performance reasons, directory records
  44. are not allowed to cross block boundaries.  Large number of file versions
  45. results in multiple records with bits in the flags-byte indicating whether
  46. any given record is preceded and/or followed by another record for the
  47. same filename.  What constitutes "large number of versions" depends on
  48. the length of the filename involved.
  49.  
  50.         Pat Rankin, rankin@eql.caltech.edu
  51.  
  52.