fifoModule
kfifo (kernel FIFO) implementation.
This library allows creating and managing fixed-size FIFO queues for byte streams, suitable for producer-consumer scenarios within the kernel. Each call takes the object’s lock, so one fifo can be shared between runtimes, as throughruntime:resume, and used from softirq.
Class fifo
| fifo:close () | Closes and releases the FIFO object. |
| fifo:pop (size) | Pops data from the FIFO. |
| fifo:push (data) | Pushes data into the FIFO. |
fifo
| new (size) | Creates a new kernel FIFO (kfifo) object. |
Class fifo in detail
Represents a kernel FIFO (kfifo) object.
This is a userdata object returned by
fifo.new(). It encapsulates
a struct kfifo from the Linux kernel, providing a first-in, first-out
byte queue.
- fifo:close ()
-
Closes and releases the FIFO object.
It also runs when a to-be-closed variable holding the object goes out of scope. Later calls raise
“closed object”.
Returns
-
nil
- fifo:pop (size)
-
Pops data from the FIFO.
Retrieves a specified number of bytes from the FIFO.
Parameters
- size integer maximum number of bytes to retrieve from the FIFO, up to its capacity.
Returns
-
string
A string containing the bytes popped from the FIFO. The actual length of this string might be less than
sizeif the FIFO contained fewer bytes. - integer actual number of bytes popped from the FIFO.
Raises
Error ifsizeis out of bounds.See also
Usage
-- Assuming 'myfifo' is a fifo object local data, len = myfifo:pop(10) if len > 0 then print("Popped " .. len .. " bytes: " .. data) end
- fifo:push (data)
-
Pushes data into the FIFO.
Copies a string of bytes into the FIFO, whole or not at all.
Parameters
- data string bytes to push into the FIFO, up to its capacity.
Returns
-
boolean
trueif the FIFO took the bytes,falseif it has no room for them all.Raises
“out of bounds” for a string longer than the FIFO’s capacity, which no pop makes room for.See also
Usage
-- Assuming 'myfifo' is a fifo object if not myfifo:push("hello") then print("full") end
fifo in detail
- new (size)
-
Creates a new kernel FIFO (kfifo) object.
Allocates and initializes a kfifo of the specified size. The size should
ideally be a power of two for kfifo’s internal optimizations, though kfifo
will handle non-power-of-two sizes by rounding up.
Parameters
- size
integer
desired capacity of the FIFO in bytes, from 2 up to
KMALLOC_MAX_SIZE.
Returns
-
fifo
A new fifo object.
Raises
Error ifsizeis out of bounds;ENOMEMif the kernel cannot allocate the buffer.Usage
local myfifo = fifo.new(1024) -- Creates a FIFO with a capacity of 1024 bytes
- size
integer
desired capacity of the FIFO in bytes, from 2 up to