2013-08-30 11 views
7

Non riesco a trovare molte informazioni là fuori che menziona questo. Questi setup standard di descrittori io sono tamponati o non bufferati di default in Lua? Posso passare da una modalità all'altra se lo si desidera?È stdin, stdout, stderr buffered o unbuffered in Lua?

Ad esempio, in python fornisce qualcosa come sys.stdin.detach per renderlo unbuffered.

risposta

5

Vedere setvbuf. È un'interfaccia per la funzione C setvbuf sottostante.

Ad esempio è possibile utilizzare in questo modo:

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

per quanto ne so Lua si basa sul runtime C sottostante per agganciare in flussi standard, quindi credo che le solite garanzie per flussi standard C si applicano.

4

Come questa domanda richiede anche il predefinito buffer per gli stream standard. Da Lua utilizza flussi standard di C internamente, la stessa regola vale:

standard C richiede:

  1. Standard input e output standard sono completamente bufferizzati, se e solo se non si riferiscono ad un dispositivo interattivo.
  2. L'errore standard non è mai completamente bufferizzato.

POSIX implica (ma non richiede):

  1. errore standard è sempre unbuffered.
  2. Tutti gli altri flussi sono a buffer di linea se si riferiscono a un terminale dispositivo; altrimenti, sono completamente bufferizzati.

Uguale a C, è possibile utilizzare setvbuf per modificare lo stato del buffer.