2013-08-30 18 views
7

Nie mogę znaleźć zbyt wielu informacji, które by o tym wspomniały. Czy te standardowe deskryptory urządzeń są domyślnie buforowane lub domyślnie buforowane w Lua? Czy w razie potrzeby mogę przełączyć się z jednego trybu na drugi?Czy stdin, stdout, stderr buforowane lub niebuforowane w Lua?

Na przykład w pythonie zapewnia coś w rodzaju sys.stdin.detach, co powoduje, że jest niebuforowany.

Odpowiedz

5

Zobacz setvbuf. Jest to interfejs do podstawowej funkcji C setvbuf.

Na przykład można go używać tak:

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

AFAIK Lua opiera się na leżącej C do podłączenia do wykonywania standardowych strumieni, dlatego myślę, że zwykłe gwarancje dla C standardowych strumieni zastosowania.

4

Jako że to pytanie również prosi o buforowanie domyślne dla standardowych strumieni. Ponieważ Lua wykorzystuje standardowe strumienie c za wewnętrznie, ta sama zasada dotyczy:

standardowa C wymaga:

  1. Standardowe wejście i wyjście standardowe są w pełni buforowane, wtedy i tylko jeśli nie odnoszą się do interaktywnego urządzenia.
  2. Błąd standardowy nigdy nie jest w pełni buforowany.

POSIX implikuje (ale nie wymaga):

  1. błąd standardowy jest zawsze niebuforowana.
  2. Wszystkie inne strumienie są buforowane liniowo, jeśli odnoszą się do urządzenia końcowego ; w przeciwnym razie są w pełni buforowane.

Tak samo jak C, można użyć setvbuf, aby zmienić status bufora.

Powiązane problemy