在Lua中,stdin、stdout和stderr是缓冲的还是非缓冲的?

8

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

例如,在Python中,它提供了像sys.stdin.detach这样的东西来使其变成非缓冲。

2个回答

9
请参考setvbuf。它是底层C语言setvbuf函数的接口。
例如,您可以像这样使用它:
io.stdout:setvbuf 'no'    -- switch off buffering for stdout

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

4
由于Lua内部使用了C的标准流,因此这个问题也涉及到标准流的默认缓冲区。遵循同样的规则:
标准C要求:
1. 标准输入和标准输出是完全缓冲的,当且仅当它们不引用交互式设备时。 2. 标准错误永远不会被完全缓冲。
POSIX暗示(但不要求):
1. 标准错误总是不带缓冲的。 2. 所有其他流如果引用终端设备,则是行缓冲的;否则,它们是完全缓冲的。
与C相同,可以使用setvbuf更改缓冲区状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接