write(2) to /dev/ad4 = EINVAL

Hans Petter Selasky hselasky at c2i.net
Mon Jan 26 02:31:29 PST 2009


On Monday 26 January 2009, Lukasz Jaroszewski wrote:
> 2009/1/26 Hans Petter Selasky <hselasky at c2i.net>:
> > On Monday 26 January 2009, Lukasz Jaroszewski wrote:
> >> Hi,
> >> after opening /dev/ad4 with success for O_RDWR, I am getting [EINVAL]
> >> from write(2), which according to man 2 write, means
> >>  ``     [EINVAL]           The pointer associated with d was
> >> negative.'', as you can see below it is not true, I have tried
> >> different block sizes, with same result.
> >>
> >> How can I write one byte to /dev/adN ?
> >
> > Hi,
> >
> > You cannot write one byte to /dev/adN, I think. Harddisks are block
> > based. Please see:
> >
> > diskinfo -v ad4
> >
> > And especially the "sector size". When you seek and transfer data the
> > offset and length must be a factor of the "sector size" or "block size".
> > See also LBA, logical block address.
>
> Yes, I have tried with bs=512 and multiplies, no luck.
>
> root@~(0)   diskinfo -v ad4
> ad4
>         512             # sectorsize
>         2029805568      # mediasize in bytes (1.9G)
>         3964464         # mediasize in sectors
>         3933            # Cylinders according to firmware.
>         16              # Heads according to firmware.
>         63              # Sectors according to firmware.
>         ad:CFx20CARDx200000190C # Disk ident.
>

And if you add a "lseek(f, 0, SEEK_SET);" after open?

--HPS


More information about the freebsd-hackers mailing list