Lua空FIFO上的非阻塞读访问

时间:2011-10-19 11:06:51

标签: lua

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

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

当fifo为空/不用时,我的脚本阻止。有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:3)

我猜没有直接的Lua-only方法。使用luajit http://luajit.org/(提供ffi),有可能:

 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