2
我寫從FIFO.for讀取數據有點LUA腳本,這個我用的是經典:Lua的非阻塞讀存取權限的空FIFO
f=assert(io.open("/tmp/myfifo")
f:read()
當FIFO空/ feeded,我的腳本塊。有沒有辦法避免這種情況?
我寫從FIFO.for讀取數據有點LUA腳本,這個我用的是經典:Lua的非阻塞讀存取權限的空FIFO
f=assert(io.open("/tmp/myfifo")
f:read()
當FIFO空/ feeded,我的腳本塊。有沒有辦法避免這種情況?
我猜想沒有直接的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
奇怪,這只是返回'nil'時沒有什麼留在FIFO中。 – jpjacobs
在Linux上,似乎在FIFO上存在阻止讀取訪問和非阻止讀取訪問。我的腳本嘗試讀取的fifo是由mpd生成的。如果我在空fifo上使用cat,cat命令會阻塞,直到fifo中有數據。 – cedlemo
啊,現在我明白了。這是io.open阻止,而不是閱讀。 – jpjacobs