Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!olivea!decwrl!sgi!shinobu!odin!anchor!olson From: olson@anchor.esd.sgi.com (Dave Olson) Newsgroups: comp.sys.sgi Subject: Re: The disk volume header... again Message-ID: <1991Mar2.071439.1119@odin.corp.sgi.com> Date: 2 Mar 91 07:14:39 GMT References: <9103012010.AA04983@koko.pdi.com> Sender: news@odin.corp.sgi.com (Net News) Organization: Silicon Graphics, Inc. Mountain View, CA Lines: 31 In <9103012010.AA04983@koko.pdi.com> shoshana@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.