由于我目前对此事的知识不足,而且不确定从哪里开始,我需要一些帮助来尝试理解以下情况。
从具有主Lua状态的C pthread中,每个请求都创建一个Lua协程,将一个预注册的Lua函数和一些arg放在堆栈上,并以lua_resume开始。这个Lua脚本函数执行io.popen并调用一个C函数,该函数从io.popen获取FILE *,获取相应的fd,将其设置为非阻塞,将其添加到读取事件队列中并执行lua_yield。到目前为止,C接手了。当C调用lua_resume时,它将阻塞,直到我从与所讨论的FILE *相关联的fd中读取所有内容为止。有什么办法可以避免这种阻塞?如果我只想读取一个char并立即返回C而不关心io.popen的剩余输出怎么办?
我在LuaJIT 2.1beta3和Lua 5.1中都尝试过,它们的行为相同。 任何帮助将不胜感激。