bolug bonner linux user group
news about wissen files archive hilfe suchen  

 

archive :: BoLUG

druckfassung

BoLUG

Re: Mehrere Dateien vertauschen und atomar umbenennen?

To: bolug@xxxxxxxxxxx
Subject: Re: Mehrere Dateien vertauschen und atomar umbenennen?
From: Aldo Valente <aldo@xxxxxxxxxxxxxxxx>
Date: 22 Oct 2002 20:37:32 +0200
Christoph Lampert <chl@xxxxxxxxxxxxxxxx> writes:

> On 22 Oct 2002, Aldo Valente wrote:
> > Johannes Niess <j.niess@xxxxxxxxxxx> writes:
> > 
> > > Michael Schuerig <schuerig@xxxxxxx> writes:
> > > 
> > > > Gelegentlich kommt es vor, dass ich die Namen von Dateien (oder den 
> > > > Inhalt von Dateien) vertauschen möchte, etwa xyz <-> xyz.bak. Nun, 
> > > > bisher mache ich das explizit mit mv. Aber das lässt sich ja 
> > > > verbessern.
> > > > 
> > > > 1a. Namen mit einem Befehl vertauschen. 
> > 
> > mv.  Ich schätze, mv erzeugt zuerst den zweiten Namen und löscht dann
> > erst den ersten.  Wäre es Dir "atomar" genug, wenn mv zuerst löscht und
> > dann erst neu anlegt?
> 
> Nein, es geht nicht nur um Umbenennen, sondern um _Vertauschen_. 
> xyz wird zu xyz.bak, xyz.bak wird zu xyz.

Aha.  Kann sein, das ich das nicht mehr verstehe, aber für mich 
gibt es keinen sinnvollen Unterschied zwischen Vertauschen und
Umbenennen. 

Ich nehme beide FDs, lösche beide Dateinamen und erzeuge neue
Dateinamen.  Ob ich letzteres vor dem mittleren mache, hängt von den
Rahmenbedingungen der Aufgabe ab. 

Ob andere Programme gleichzeitig einen Zeiger auf den Inhalt haben
oder nicht, kann ich sowieso nicht beeinflussen.

> > > > 1b. Dasselbe ohne ohne temporären Dateinamen.
> > 
> > Braucht mv nicht.
> 
> Sondern? Wenn ich     xyz zu  xyz.bak  machen will und "gleichzeitig" 
> xyz.bak zu xyz muss ich den Umweg "uber einen temporaere Dateinamen 
> gehen. Oder wie sonst sollte mv das hinkriegen? 

Siehe oben, ein "extended mv" würde es wie oben machen.

> > > > 3. Atomar den Inhalt der Dateien vertauschen.

> > Johannes' Weg geht also prima.  Dateien öffnen, Dateien unlinken und
> > neu anlegen.
> 
> Der Vertauschungsvorgang wird korrekt durchgefuehrt, aber gegenueber der
> Loesung mit temporaerem Dateinamen ist kein Vorteil. 
> Nach dem Loeschen ist die Datei aber nicht mehr im Verzeichnisbaum,
> ein anderer Prozess, der versucht, darauf zuzugreifen, scheitert also. 
> 
> Vielleicht muesste man (Resourcen verschwendend)
> 
> [1]% cp xyz xyz.temp
> [2]% mv xyz.bak xyz   
> [3]% mv xyz.temp xyz.bak

Kann ich bei [2] wirklich in einem Schritt das alte xyz durch das neue
ersetzen?  Ich denke nein, ein unlink/create müßte das erledigen.  Ich
denke, zwischen 1,2 und 3 ist jetzt keine Lücke, aber dafür ist sie
innerhalb der Schritte.


Aldo
-- 
"Dogs believe they are human.  Cats believe they are God."

 

seitenanfang


 

news about wissen files archive hilfe suchen  
kontakt letzte änderung: 22.10.2002