Bash Lesen/schreiben der Datei-Deskriptoren — seek zum Anfang der Datei

Ich versuchte, verwenden Sie die read - /write-Datei-Deskriptor in der bash, damit ich die Datei löschen, die den file-Deskriptor bezeichnet, danach als solche:

F=$(mktemp)
exec 3<> "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&3

aber die cat Befehl gibt keine Ausgabe. Ich kann erreichen, was ich will, wenn ich separate Datei-Deskriptoren zum schreiben und Lesen:

F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&4

dem Drucke Hello world.

Ich vermutete, dass bash nicht automatisch, suchen Sie den Anfang der file-Deskriptor, wenn Sie wechseln von schreiben zu Lesen, und die folgende Kombination von bash-und python-code bestätigt dies:

fdrw.sh

exec 3<> tmp
rm tmp

echo "Hello world" >&3
exec python fdrw.py

fdrw.py

import os  

f = os.fdopen(3)
print f.tell()
print f.read()

gibt:

$ bash fdrw.sh
12

$ # This is the prompt reappearing

Gibt es eine Möglichkeit, das zu erreichen, was ich will, nur mit bash?

  • warum würden Sie wollen, um die Datei zu löschen, bevor Sie Lesen/schreiben?
  • In Unix -, wenn Sie eine Datei entfernen, wird die Datei nicht wirklich gelöscht, bis alle offenen Datei-Deskriptoren werden geschlossen. So, das löschen einer temporären Datei direkt nach dem öffnen ist gängige Praxis, da es garantiert, dass kein anderer Prozess kann in böser Absicht ändern der Datei und dass die Datei geschlossen ist, nachdem Sie Ihren Prozess die Datei schließt oder beendet.
  • Warum magst du deine eigene Methode, für die man separate lese-und schreib-Deskriptoren? Das scheint die einfachste Möglichkeit.
InformationsquelleAutor telotortium | 2010-10-01
Schreibe einen Kommentar