Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!decwrl!ucbvax!pdi.UUCP!shoshana From: shoshana@pdi.UUCP (Shoshana Abrass) Newsgroups: comp.sys.sgi Subject: The disk volume header... again Message-ID: <9103012010.AA04983@koko.pdi.com> Date: 1 Mar 91 20:10:27 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 40 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. I've looked at the man pages for vh, dksc, and the include files dvh.h and dkio.h, and nothing jumps out at me. I've tried doing an lseek to the logical block number, but I get either zeros or garbage. I know zilch about how devices work at this level, so I tried the following lseeks on both /dev/vh and /dev/rvh: lbn sizeof(struct volume_header) + lbn I then do a read of length-of-file, and I get 512 bytes back - of nothing. Perhaps there's an ioctl command for this that I haven't found yet, or I'm not doing the lseeks-reads correctly. 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 ide 500224 415 sash 200704 1392 -shoshana shoshana@pdi.com