The disk volume header... again

Dave Olson olson at anchor.esd.sgi.com
Sat Mar 2 18:14:39 AEST 1991


In <9103012010.AA04983 at koko.pdi.com> shoshana at pdi.UUCP (Shoshana Abrass) writes:
|   Last week I posted a question and answer about how to read the volume
|   header into a c program. My code looks like this (extras and error  
|   checking removed for brevity):
|     struct volume_header  *vh;
|     fd = open("/dev/rvh", O_RDONLY);
|     ioctl(fd, DIOCGETVH, vh);
|   The ioctl call fills "vh" with useful information, and I can then read
|   the volume directory and determine the length and logical-block-number
|   of the file I want to read.  But... what now?  I'd like to read this 
|   file in off the disk. 
|   By the way, if I copy the file from the volume directory onto disk using
|   dvhtool, I get an ascii file containing what I expect. The length and lbn
|   in my program also match the values returned by dvhtool:
|         File name        Length     Block #
|         sgilabel            280           1
|         diskno              512         414     <== the file I want

An lseek(fd, 414*512, 0), followed by a read is all that dvhtool does
in this case.  (Where fd is a file descriptor for the volume header,
414 is the vd_lbn from the structure, and 512 is the dp_secbytes
from the vh, with the caveat that if dp_secbytes is 0, you assume
512 for compatiblity reasons.)

You must of course read multiples of dp_secbytes bytes, in all cases, since
you are dealing with the raw disk, but that doesn't sound like your problem.
--

	Dave Olson

Life would be so much easier if we could just look at the source code.



More information about the Comp.sys.sgi mailing list