8

我真的找不到太多提到这一点的信息。这些标准 io 描述符在 Lua 中默认设置为缓冲还是非缓冲?如果需要,我可以从一种模式切换到另一种模式吗?

例如,在 python 中,它提供了类似sys.stdin.detach使其无缓冲的东西。

4

2 回答 2

8

请参阅setvbuf。它是底层 Csetvbuf函数的接口。

例如,您可以像这样使用它:

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

AFAIK Lua 依赖于底层 C 运行时来挂钩标准流,因此我认为 C 标准流的通常保证适用。

于 2013-08-30T21:42:55.540 回答
4

因为这个问题还询问标准流的默认缓冲性。由于 Lua 在内部使用 C 的标准流,所以同样的规则适用:

标准 C 要求:

  1. 标准输入和标准输出是完全缓冲的,当且仅当它们不引用交互式设备时。
  2. 标准错误永远不会完全缓冲。

POSIX 暗示(但不要求):

  1. 标准错误总是无缓冲的。
  2. 如果所有其他流引用终端设备,则它们都是行缓冲的;否则,它们将被完全缓冲。

和 C 一样,可以setvbuf用来改变缓冲区状态。

于 2013-08-31T00:44:03.757 回答