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