Subject: stat(2), st_size on devices
To: None <tech-kern@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-kern
Date: 02/17/2005 00:08:52
--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi,
with the attached test program, I stat some disk device. Sometimes I
get the real size of the parition, sometimes I get 0:
rochebonne# disklabel wd2
[...]
8 partitions:
# size offset fstype [fsize bsize cpg/sgs]
d: 156301488 0 unused 0 0 # (Cyl. 0 - 155060)
e: 59999184 0 4.4LFS 0 0 0 # (Cyl. 0 - 59522)
f: 59999184 59999184 4.2BSD 2048 16384 28808 # (Cyl. 59523 - 119045)
g: 36303120 119998368 4.2BSD 0 0 0 # (Cyl. 119046 - 155060)
rochebonne# /tmp/tstat /dev/rwd2d
dev 0x0 rdev 0x313 size 80026361856 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2e
dev 0x0 rdev 0x314 size 30719582208 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2f
dev 0x0 rdev 0x315 size 0 blocks 65536
rochebonne# /tmp/tstat /dev/rwd2g
dev 0x0 rdev 0x316 size 0 blocks 65536
rochebonne# /tmp/tstat /dev/wd2g
dev 0x0 rdev 0x16 size 0 blocks 2048
rochebonne# /tmp/tstat /dev/wd2f
dev 0x0 rdev 0x15 size 30719582208 blocks 2048
rochebonne# /tmp/tstat /dev/wd2e
dev 0x0 rdev 0x14 size 30719582208 blocks 2048
rochebonne# /tmp/tstat /dev/wd2d
dev 0x0 rdev 0x13 size 0 blocks 2048
Any reason for such a behavior ?
--
Manuel Bouyer <bouyer@antioche.eu.org>
NetBSD: 26 ans d'experience feront toujours la difference
--
--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="main.c"
#include <sys/stat.h>
main(int argc, char **argv)
{
struct stat sb;
if (stat(argv[1], &sb) < 0) {
perror("stat");
exit(1);
}
printf("dev 0x%x rdev 0x%x size %lld blocks %d\n",
(int)sb.st_dev, (int)sb.st_rdev, (long long)sb.st_size,
(int)sb.st_blksize);
}
--jI8keyz6grp/JLjh--