2017-01-09 8 views
0

Es scheint, dass in Linux C bis fread und fwrite nennt als auf den Menschen Seiten gesperrt sind (man fwrite) einige entriegelten Funktion erwähnt werden (unlocked_stdio).zum Sperren in fread/fwrite und von verschiedenen Prozessen genannt

Wie Ihnen bekannt ist, sind diese Sperren über den Prozess hinweg gültig oder sperren sie nur innerhalb desselben Prozesses?

+0

afaik, bezieht sich der von Ihnen zitierte Satz auf Multithreading –

+0

"* Locking *"? Welche Verriegelung? Wagst du es, unsere Informationsquelle zu nennen? – alk

+0

hinzugefügte Quelle. Leider habe ich gerade diesen Beitrag gefunden. Bezieht sich auf Solaris, aber es erwähnt C http://stackoverflow.com/questions/3685115/does-fwrite-call-any-lock-internally –

Antwort

3

Sie sperren nicht einmal innerhalb des Prozesses. Sie sperren nur das tatsächliche Stream-Objekt, auf dem Sie sie aufrufen. Wenn Sie zum Beispiel zwei FILE* Objekte haben, die auf die gleiche Datei oder das gleiche Terminal verweisen, können fread und fwrite glücklich zulassen, dass sie sich gegenseitig trampeln, sogar im selben Prozess.

+0

... oh Liebes ... so ist die einzige Garantie hier, dass FILE * es streamen wird intakt sein (hoffentlich innerhalb desselben Prozesses), aber nicht das tatsächliche Schreiben in Datei, das von anderen Ops verschachtelt werden kann. Also ist es das Dev, um sicherzustellen, dass die 2 korrekt synchronisiert sind. –

+1

@AbruzzoForteeGentile Über Prozesse hinweg können Sie 'Flock'-artige Sperren verwenden. In einem Prozess schreiben Sie den gesamten Code, also sollten Sie einen Weg finden, dies zu tun. –

Verwandte Themen