Lua Неблокируемый доступ для чтения на пустом FIFO - PullRequest
2 голосов
/ 19 октября 2011

Я пишу небольшой скрипт lua, который читает данные из FIFO. Для этого я использую классический:

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

Когда fifo пуст / не передан, мой блок скриптов.Есть ли способ избежать этого?

1 Ответ

3 голосов
/ 19 октября 2012

Я не думаю, что существует какой-либо прямой метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...