Lua在空FIFO上进行非阻塞读取访问。

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

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

当 FIFO 为空/未被填充时,我的脚本会阻塞。有没有办法避免这种情况?。

原文链接 https://stackoverflow.com/questions/7820356

点赞
stackoverflow用户1358661
stackoverflow用户1358661

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

 local ffi = require'ffi'

 --- 此进程使用的 libc 函数。
 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)
 -- .. 处理数据
2012-10-19 10:17:55