Messages in this thread | | | Date | Tue, 8 Nov 2005 13:49:57 -0500 | From | Theodore Ts'o <> | Subject | Re: Compatible fstat() |
| |
On Tue, Nov 08, 2005 at 05:22:44PM +0000, Al Viro wrote: > On Tue, Nov 08, 2005 at 12:10:25PM -0500, Parag Warudkar wrote: > > > > On Nov 8, 2005, at 10:48 AM, linux-os ((Dick Johnson)) wrote: > > > > >The Linux fstat() doesn't return any information number of blocks, > > >or the byte-length of a physical hard disk. > > > > I don't think (f)stat returns size and blocks information about a > > block device on any UNIX platform. > > > > But I don't know for sure how to get it - perhaps ioctl on the > > device? BLKGETSIZE? > > fd = open(bdev, O_RDONLY); > lseek(fd, SEEK_END, 0); > size = lseek(fd, SEEK_SET, 0); > close(fd); > > i.e. same as for regular files. Won't be portable, though...
As I recall, this didn't always work; e2fsprogs falls back to using a binary search using SEEK_SET to find the device size. Folks who need to do this should look at lib/ext2fs/getsize.c in the e2fsprogs sources; it has ioctl's and other procedures for determining block device size for Linux, *BSD, MacOSX, as well a generalized binary search algorithm.
- Ted
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |