2013-08-30 7 views
7

Ich kann nicht wirklich viele Informationen da draußen finden, die dies erwähnen. Sind diese standardmäßigen io-Deskriptoren standardmäßig in Lua gepuffert oder ungepuffert? Kann ich bei Bedarf von einem Modus zum anderen wechseln?Ist stdin, stdout, stderr gepuffert oder ungepuffert in Lua?

Zum Beispiel in Python bietet es so etwas wie sys.stdin.detach für die Herstellung es ungepuffert.

Antwort

5

Siehe setvbuf. Es ist eine Schnittstelle zur zugrundeliegenden C setvbuf Funktion.

Zum Beispiel können Sie es wie folgt verwendet werden:

io.stdout:setvbuf 'no' -- switch off buffering for stdout 

AFAIK Lua auf der zugrunde liegenden C-Laufzeit verlässt sich in Standard-Streams einzuhaken, deshalb denke ich, die üblichen Garantien für C Standard-Streams anwenden.

4

Da diese Frage auch die Standard Puffer-Ness für Standard-Streams fragt. Da Lua intern verwendet Standard-Streams von C gilt die gleiche Regel:

Standard C erfordert:

  1. Standardeingabe und die Standardausgabe vollständig gepuffert werden, wenn und nur , wenn sie sich auf ein interaktives Gerät beziehen sich nicht.
  2. Der Standardfehler ist niemals vollständig gepuffert.

POSIX bedeutet (aber erfordert nicht):

  1. Standardfehler immer ungepufferte ist.
  2. Alle anderen Datenströme sind zwischengespeichert, wenn sie sich auf ein Terminal beziehen; Ansonsten sind sie vollständig gepuffert.

Das gleiche wie C, kann man setvbuf verwenden Pufferstatus zu ändern.