17 lines
448 B
Fennel
17 lines
448 B
Fennel
(local posix (require :posix))
|
|
(local fcntl (require :posix.fcntl))
|
|
|
|
(fn open [name direction]
|
|
(let [flags (match direction
|
|
:r posix.O_RDONLY
|
|
:w (+ posix.O_WRONLY posix.O_CREAT))
|
|
fd (posix.open name flags)]
|
|
(fcntl.fcntl fd fcntl.F_SETFL fcntl.O_NONBLOCK)
|
|
{
|
|
:read #(posix.unistd.read fd $2) ;XXX needs to check for eof
|
|
:close #(posix.unistd.close fd)
|
|
:fileno fd
|
|
}))
|
|
|
|
{: open }
|