在Lua中是stdin,stdout,stderr缓冲还是无缓冲?

时间:2013-08-30 21:21:28

标签: lua stdout stdin

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

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

2 个答案:

答案 0 :(得分:6)

setvbuf。它是底层C setvbuf函数的接口。

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

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

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

答案 1 :(得分:4)

因为这个问题还要求标准流的默认缓冲区。由于Lua在内部使用C的标准流,因此适用相同的规则:

标准C要求:

  1. 标准输入和标准输出是完全缓冲的,仅限于此 如果他们没有参考互动设备。
  2. 标准错误永远不会完全缓冲。
  3. POSIX暗示(但不要求):

    1. 标准错误始终是无缓冲的。
    2. 如果所有其他流引用终端,则它们都是行缓冲的 设备;否则,它们是完全缓冲的。
    3. 与C相同,可以使用setvbuf来更改缓冲区状态。