Re: [ILUG] RE: sed people ?

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