Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Feb 2011 15:04:47 -0800
From:      Garrett Cooper <yanegomi@gmail.com>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        freebsd-hackers@freebsd.org, Alexander Best <arundel@freebsd.org>, Garrett Cooper <gcooper@freebsd.org>
Subject:   Re: seeking into /dev/{null,zero}
Message-ID:  <3A287E45-A369-4C7A-BA8E-A205679AC0BC@gmail.com>
In-Reply-To: <201102221251.33717.jhb@freebsd.org>
References:  <20110222141112.GA98964@freebsd.org> <AC6674AB7BC78549BB231821ABF7A9AE970EA06474@EMBX01-WF.jnpr.net> <AANLkTimwOVub6XxZqgCmHPnLbekJrEbYQBzxUr%2BUrcR5@mail.gmail.com> <201102221251.33717.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Feb 22, 2011, at 9:51 AM, John Baldwin wrote:

> On Tuesday, February 22, 2011 11:46:05 am Garrett Cooper wrote:
>> (Please bottom post)
>>=20
>> On Tue, Feb 22, 2011 at 8:31 AM, Andrew Duane <aduane@juniper.net> =
wrote:
>>> I thought seeking past EOF was valid; writing something creates a =
file=20
> with a hole in it. I always assumed that was standard semantics.
>>=20
>>    That's with SET_HOLE/SET_DATA though, correct? If so, outside of
>> that functionality I would assume relatively standard POSIX =
semantics.
>=20
> Err, no, you can always seek past EOF and then call write(2) to extend =
a file=20
> (it does an implicit ftruncate(2)).  SEEK_HOLE and SEEK_DATA are =
different,=20
> they are just used to discover sparse regions within a file.
>=20
> =46rom the manpage:
>=20
>     The lseek() system call allows the file offset to be set beyond =
the end
>     of the existing end-of-file of the file.  If data is later written =
at
>     this point, subsequent reads of the data in the gap return bytes =
of zeros
>     (until data is actually written into the gap).

	You're correct. Linux (Fedora 13) isn't POSIX compliant (this is =
from the official POSIX text):

The lseek ( ) function shall allow the file offset to be set beyond the =
end of the existing data in the file. If data is later written at this =
point, subsequent reads of data in the gap shall return bytes with the =
value 0 until data is actually written into the gap.

Thanks!
-Garrett=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A287E45-A369-4C7A-BA8E-A205679AC0BC>