zwei Datei-Deskriptoren auf dieselbe Datei
Mittels posix read() write () - linux nennt, ist es garantiert, dass, wenn ich Schreibe, durch einen Datei-Deskriptor, und durch Lesen einer anderen Datei-Deskriptor, der in einem serial-Mode, so dass die beiden Aktionen schließen sich gegenseitig aus der jeweils anderen..., dass mein Lesen der Datei-Deskriptor wird immer sehen, was geschrieben wurde, zuletzt durch das schreiben der Datei-Deskriptor?
ich glaube, dass dies der Fall ist, aber ich wollen, stellen Sie sicher, und Sie die man-Seite ist nicht sehr hilfreich, auf diese
InformationsquelleAutor Michael Xu | 2011-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, wo du die zwei Datei-Deskriptoren. Wenn Sie kommen aus einem dup(2) - Aufruf, dann teilen Sie Datei-offset und-status, so dass bei einer write(2) wird Einfluss auf die position auf der anderen. Wenn auf der anderen Seite, Sie kommen aus zwei separaten open(2) fordert, wird jeder haben Ihre eigenen Datei-offset und status.
Einen Datei-Deskriptor ist meist nur ein Verweis auf eine kernel-Datei-Struktur, und es ist, dass kernel-Struktur, die enthält die meisten des Staates. Wenn Sie open(2) eine Datei, erhalten Sie eine neue kernel-Datei-Struktur und einen neuen Datei-Deskriptor bezieht sich auf dieses. Wenn Sie dup(2) ein file-descriptor (oder übergeben Sie einen Datei-Deskriptor durch sendmsg), erhalten Sie einen neuen Verweis auf die gleiche kernel-Datei struct.
Mit zwei separaten open-Aufrufe, jeder fd wird seine eigene position. Wenn also beide sind am Anfang der Datei, und schreiben Sie mit eine, der andere wird sich noch an den Anfang der Datei, also ein schreiben, es wird überschrieben, was die ersten schreiben, schrieb, es sei denn, Sie öffnete die Datei mit O_APPEND (in dem Fall jedes schreiben implizit strebt das Ende vor dem schreiben).
danke chris. meine Frage war ein bisschen anders, aber ja... wenn das zweite war zu Lesen, es würde genau Lesen was der erste geschrieben hat. die asnwer meiner Frage ist, dass, ja, die garantiert, dass jeder das Lesen aus der Datei nach dem schreiben zurückgegeben hat, wird Lesen, was write geschrieben hat. dies liegt daran, dass linux sperren Zugriff auf I / O-cache-Seiten im Speicher
so können wir zwei Datei-Deskriptoren verweisen auf die gleiche Datei, aber haben verschiedenen Wert?
InformationsquelleAutor Chris Dodd
Dadurch ist gewährleistet, wenn Sie beziehen sich beide auf die gleiche Datei Beschreibung, aka Sie habe Sie von "dup" oder "dup2" (oder geerbt über
fork()
).InformationsquelleAutor Erik
wenn Sie
dup()
oderdup2()
oderfork()
,die Tabelle file wird gemeinsam von beiden die Datei-Deskriptoren.
also, wenn Sie
write
etwas von einem Datei-Deskriptor , und wiederwrite
etwas über andere Datei-Deskriptor , dann ist es angehängt, nicht überschrieben.aber wenn zwei unabhängige Prozess öffnen einer Datei , dann werden die geschriebenen Daten durch beide Verfahren können gemischt werden.
InformationsquelleAutor user2742399