On Wed, Jan 07, 2004 at 02:44:20PM +0100, Simon 'corecode' Schubert wrote:
> 1. cat muss gestartet werden (evtl ein Builtin, aber egal)
> 2. sed muss gestartet werden
> 3. eine Pipe muss zwischen Prozess (1) in Richtung Prozess (2) erzeugt
> werden. Das setzt nun also voraus, dass Prozess (2) bereits existiert,
> sonst koennte man ja stdout nicht auf dessen stdin draufschrauben.
> 4. Die Ausgabeumleitung muss auch eingestellt werden. Das setzt
> wiederum voraus, dass stdout von Prozess (2) bereits umgeleitet ist,
> bevor dieser ausgefuehrt wird.
>
> Es scheint also so, als ob die Umleitungen von rechts nach links
> erzeugt werden? Wie sollte das dann ueberhaupt irgendwann einmal
> funktionieren?
> Nach meiner Erfahrung fork()t die Shell erst, und macht dann die
> Umleitungen (IIRC). Und wie mein Scheduler jetzt will, darf als erstes
> (Builtin) die Datei oeffnen und lesen, oder eben die zweite Seite der
> Pipe darf als erstes die Datei abschnipseln.
> Dann kann man noch mit Subshells und sleep && rm arbeiten, aber das
> wird dann schon sehr experimentell...
Jetzt muss ich auch mal wieder was dazu sagen ;-)
cat mit nur einer Datei ist ueberfluessig - das kann die Shell
auch mit '<datei'. Und wenn man 'sed -e expression <datei >datei'
ausprobiert, dann ist 'datei' auf jeden fall leer, bevor man
etwas daraus lesen kann.
Wenns denn cat sein muss, koennte man auch mit named pipes arbeiten um
irgenwelche Shell- Eigenheiten zu umgehen:
mkfifo /tmp/xyzzy$$
cat datei >/tmp/xyzzy$$&
# evtl. sleep einfuegen
sed -e expression </tmp/xyzzy$$ >datei
Und dann austesten, wie gross die Datei maximal sein kann, um
in den Pipe-Buffer zu passen.
-Franz
To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 07 Jan 2004 - 15:52:08 CET