From: John Allen (john.allen at domain oc2.com)
Date: Mon 14 Feb 2000 - 11:42:07 GMT
Kenn Humborg wrote:
> > > On Fri, 11 Feb 2000 20:02:33 -0000 "Kenn Humborg" <kenn at domain bluetree.ie>
> > > wrote:
> > > | > sed 's/ *| */|/g' file | cat > file
> > >
> > > | > surely ??
> > >
> > > | Is that _guaranteed_ not to truncate 'file' before sed
> > > | reads it?
> > >
> > well, yes it should do, because its handing the output to cat before being
> > piped back into itself . . . now of course thats down to how much info cat
> > can hold . . . but you certainly shouldn't see sed overwrite the file it's
> > trying to parse
> I'd have to disagree. I'd see it working like this:
> 1. Shell breaks up pipeline into two commands:
> sed -e '...' file
> cat > file
> 2. It creates a pipe.
> 3a. To execute the first command, it creates an argv array,
> hooks fd 1 up to the pipe's input and forks/execs.
> 3b. To execute the second command, it opens 'file' for writing
> on fd 1, which should truncate the file. Then it forks
> and execs cat.
> So, depending on the order in which 3a and 3b are done, sed
> might get enough time to read all of file (if it is short and
> in-cache) before the shell truncates it.
This is an inherently incorrect thing to do, it may work occasionally for small
files, depending on system load etc...., but will generally screw up.
-- =============================================================================== John Allen, Email: john.allen at domain oc2.com Orbis Payment Technology Ltd, Phone: +353-1-2945111 3 Sandyford Park, Mobile: +353-86-2315986 Sandyford Industrial Estate, Fax: +353-1-2945119 Dublin 18. ===============================================================================
This archive was generated by hypermail 2.1.6 : Thu 06 Feb 2003 - 13:05:25 GMT