Re: ftruncate not extending files?

Hugh Dickins (hugh@veritas.com)
Fri, 2 Mar 2001 14:15:49 +0000 (GMT)


On Fri, 2 Mar 2001, Dmitry A. Fedorov wrote:
> On Fri, 2 Mar 2001, bert hubert wrote:
>
> > > ftruncate() and truncate() may extend a file but they are not required to
> > > do so.
> >
> > I would've sworn, based on the fact that I saw people do it, that ftruncate
> > was a legitimate way to extend a file - especially useful in combination
> > with mmap().
>
> lseek and write does it already and need not to duplicate with truncate().
> Using truncate() to extend a file sounds very strange.
>
> About mmap() SUSv2 says:
>
> If the size of the mapped file changes after the call to mmap() as a
> result of some other operation on the mapped file, the effect of
> references to portions of the mapped region that correspond to added or
> removed portions of the file is unspecified.
> ^^^^^^^^^^^
> What do you mean about "useful in combination with mmap()" ?
>
> > I don't really care where it is done, in glibc or in the kernel - but let's
> > honor this convention and not needlessly break code.
>
> Let's don't connive to ill-formed programs.

Those are not ill-formed programs, they are just ordinary programs.

ftruncate()-to-extend and mmap() go together like knife and fork:
you don't have to use either, and you can use each separately, but
it's conventional to use them together. The awkward SIGBUS-beyond-EOF
specification of mmap() begs for a call to set filesize; often the man
page of one syscall references the other.

It would be perverse and unhelpful for Linux to offer a filesystem
which supports mmap() but not ftrunctate()-to-extend.

The SuSv2 quotations, above and in other mail, are just weasly.
They probably started off specifying the natural least-surprise
behaviours, which most support; but some vendor who failed to meet
that spec forced the wording to be changed to "unspecified".
That's no reason for Linux to be obstinate.

But I agree "ftruncate" is a confusing name for a syscall to
(truncate or) extend a file: like using a knife to spread glue.

Hugh

-
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/