2016-03-23 8 views
2

grundsätzlich von UNIX, read() und write() Funktionen sind ungepufferte I/O,Warum verwenden ungepufferte read()/write() - Operationen Puffer-Cache?

und es sind Standard-I/O, die I/O gepuffert.

Aber read() und write() Funktionen Puffer-Cache die vor tun realen mich in Kernel/A (I/O zu realer Gerät) und reale I/O-Buffer-Cache geschieht mit. Es benutzt Puffer.

Ich habe ungepufferte I/O gehört bedeutet I/O passiert Char-by-Char zu realen Gerät.

Dann warum read() und write() Funktionen unbuffered I sind/O, obwohl es Puffer-Cache verwendet?

+1

SUSv4 gibt nicht an, dass 'read' und' write' ungepuffert sein müssen: [lesen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html), [schreiben] (http: //pubs.opengroup.org/onlinepubs/9699919799/functions/write.html) –

+1

Woher haben Sie die Vorstellung, dass 'read()' und 'write()' ungepuffert sind? –

+0

Darüber hinaus existiert der 'sync' Aufruf ([sync] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/sync.html)) aus einem Grund. –

Antwort

3

Grundsätzlich bedeutet der Ausdruck "Pufferung" hier "eine Stelle, an der Daten gespeichert werden, wenn zum/vom Kern", d. H. Um einen Systemaufruf für jeden E/A-Aufruf auszuführen, verwenden die gepufferten Funktionen einen Puffer dazwischen.

Was der Kernel mit den Daten macht, kann die Standardbibliothek nicht viel bewirken.

Es wäre möglich, eine 1 zu tun: 1-Abbildung von Lese-/Schreib-Anrufen bei der Standardbibliothek Niveau (das heißt fread() und Freunde) zu read()/write() fordert den zugrunde liegenden Dateideskriptors; der Begriff Pufferung sagt Ihnen, dass nicht ist, was Sie erwarten können.

1

"(Un) gepuffert" im Handbuch bezieht sich auf Benutzer-Space-Pufferung. Die Kernel-Space-Pufferung hängt von der Implementierung ab. In der Regel werden die meisten Geräte gepuffert (Festplatte, Sockets, USB usw.), mit Ausnahme von Hardware-Ports (GPIO).

Verwandte Themen