Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空FIFO上的Lua非阻塞读取访问_Lua - Fatal编程技术网

空FIFO上的Lua非阻塞读取访问

空FIFO上的Lua非阻塞读取访问,lua,Lua,我正在编写一个从FIFO读取数据的小lua脚本。为此,我使用了经典的: f=assert(io.open("/tmp/myfifo") f:read() 当fifo为空/未馈电时,我的脚本块。有没有办法避免这种情况 我想没有直接的Lua-only方法。通过luajit(提供外国金融机构),可以: local ffi = require'ffi' --- The libc functions used by this process. ffi.cdef[[ int open(

我正在编写一个从FIFO读取数据的小lua脚本。为此,我使用了经典的:

f=assert(io.open("/tmp/myfifo")
f:read()

当fifo为空/未馈电时,我的脚本块。有没有办法避免这种情况

我想没有直接的Lua-only方法。通过luajit(提供外国金融机构),可以:

 local ffi = require'ffi'

 --- The libc functions used by this process.
 ffi.cdef[[
      int open(const char* pathname, int flags);
      int close(int fd);
      int read(int fd, void* buf, size_t count);
 ]]   
 local O_NONBLOCK = 2048
 local chunk_size = 4096
 local buffer = ffi.new('uint8_t[?]',chunk_size)
 local fd = ffi.C.open('mypipe',O_NONBLOCK)     
 local nbytes = ffi.C.read(fd,buffer,chunksize)
 -- .. process data

奇怪的是,当fifo中没有任何内容时,它只返回
nil
。在Linux上,fifo上似乎有阻塞读取访问和非阻塞读取访问。我的脚本尝试读取的fifo是由mpd生成的。如果我在空的fifo上使用cat,cat命令会阻塞,直到fifo中有数据。啊,现在我明白了。阻塞的是io.open,而不是读数。哼,不是真的,我已经检查了是否只使用f=io.open(“/tmp/myfifo”);f:关闭脚本不阻塞我认为使用基本Lua函数根本不可能我尝试设置模式r+执行io.open解除阻塞,但使用read blocking:pWith提供内置的there's
O_NONBLOCK
标志。