Was ist der Unterschied zwischen den Funktionen read()
und pread()
unter Unix?
Welche Punkte sollte ich bei der Auswahl zwischen ihnen berücksichtigen?
Ich habe nach dem Unterschied zwischen ihnen gegoogelt, aber ohne Ergebnisse.
Vijay
Was ist der Unterschied zwischen den Funktionen read()
und pread()
unter Unix?
Welche Punkte sollte ich bei der Auswahl zwischen ihnen berücksichtigen?
Ich habe nach dem Unterschied zwischen ihnen gegoogelt, aber ohne Ergebnisse.
ihuk
Vorlesen() funktioniert genauso wie lesen() liest aber ab der angegebenen Position in der Datei ohne Ändern des Dateizeigers.
Sie würden es verwenden, wenn Sie wiederholt Daten mit festem Offset lesen müssen, z. B. einen Datenbankindex, der auf einzelne Datensätze in einer Datei verweist, um zu sparen suchen() Anrufe.
Grundsätzlich verwenden lesen() wenn Ihre Daten sequentiell sind oder verbreiten () wenn Sie wissen, oder Offset berechnen können, an dem Sie lesen können.
Davon Verknüpfung,
Die Atomarität von pread ermöglicht es Prozessen oder Threads, die Dateideskriptoren gemeinsam nutzen, an einem bestimmten Offset aus einer gemeinsam genutzten Datei zu lesen, ohne einen Sperrmechanismus zu verwenden, der erforderlich wäre, um dasselbe Ergebnis in separaten lseek- und read-Systemaufrufen zu erzielen. Atomarität ist erforderlich, da der Dateizeiger gemeinsam genutzt wird und ein Thread den Zeiger möglicherweise mit lseek bewegt, nachdem ein anderer Prozess einen lseek abgeschlossen hat, jedoch vor dem Lesen.
Google hat mir gegeben man pread
.
Wenn du read()
zweimal erhalten Sie zwei unterschiedliche Ergebnisse, was das zeigt read()
Fortschritte in der Datei.
Wenn du pread(
) zweimal erhalten Sie das gleiche Ergebnis, was das zeigt pread()
bleibt an der gleichen Stelle in der Datei.
Nicht ganz. Es zeigt, dass pread()
ändert entweder die Dateiposition nicht oder kümmert sich nicht um die Dateiposition. (Zufällig ist beides wahr.)
– Adam H. Peterson
13. Mai 2015 um 17:59 Uhr
read() beginnt mit dem Lesen der angeforderten Anzahl von Bytes ab dem aktuellen Datei-Offset, während Sie mit pread() den Offset angeben können. Dies ist in Situationen nützlich, in denen ein Satz von Funktionen eine Datei sequentiell unter Verwendung des Dateizeigers durchliest, während ein anderer Satz gleichzeitig auf bestimmte Daten zugreift.