Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lseek to end on partition raw device returns 0



On Wed, Dec 15, 2010 at 11:12:50AM -0500, Toby Karyadi wrote:
> Hi all,
> 
> Does anyone know why doing lseek(fd, 0, SEEK_END), where fd is a
> descriptor to a raw disk partition, always returns 0 on current? This is
> not the behavior I noticed with netbsd-5.1. Does anyone else notice
> this? I am using the 201012071900Z/amd64 version of the HEAD (5.99.41),
> downloaded from nyftp.netbsd.org. I'm just dabbling with unix system
> programming, so I might be just blowing hot air here, but it seems like
> a bug to me. 

I seriously doubt lseek() trick works on a device file on 5.x
either.

The basic story is that getting the size of a device is a complete
mess.  lseek() doesn't work.  Then there's stat() as is demonstrated
by this snippet:

pain-rustique:15:~> stat -x /dev/rwd0e
  File: "/dev/rwd0e"
  Size: 0            FileType: Character Device
  Mode: (0640/crw-r-----)         Uid: (    0/    root)  Gid: (    5/operator)
Device: 0,0   Inode: 9586    Links: 1
Access: Wed Feb 21 21:40:35 2007
Modify: Wed Feb 21 21:40:35 2007
Change: Wed Feb 21 21:40:35 2007
pain-rustique:16:~> sleep 5 < /dev/rwd0e &
[1] 11674
pain-rustique:17:~> stat -x /dev/rwd0e
  File: "/dev/rwd0e"
  Size: 20974431744  FileType: Character Device
  Mode: (0640/crw-r-----)         Uid: (    0/    root)  Gid: (    5/operator)
Device: 0,0   Inode: 9586    Links: 1
Access: Wed Feb 21 21:40:35 2007
Modify: Wed Feb 21 21:40:35 2007
Change: Wed Feb 21 21:40:35 2007

After opening the device stat will report the correct value *until*
the vnode is reclaimed.  So if you open+stat it, you should maybe
get a correct value.

But on NetBSD, I've found the best way is to use ioctl(DIOCGDINFO).


Home | Main Index | Thread Index | Old Index