specify posix.sys.msg:
- before:
errno = require "posix.errno"
msg = require "posix.sys.msg"
st = require "posix.sys.stat"
EEXIST = errno.EEXIST
msgget, msgsnd, msgrcv = msg.msgget, msg.msgsnd, msg.msgrcv
IPC_CREAT, IPC_EXCL = msg.IPC_CREAT, msg.IPC_EXCL
S_IRWXU, S_IRWXG, S_IRWXO = st.S_IRWXU, st.S_IRWXG, st.S_IRWXO
mode = bor (S_IRWXU, S_IRWXG, S_IRWXO)
mq, err, errnum = msgget (100, bor (IPC_CREAT, IPC_EXCL, mode))
if errnum == EEXIST then
mq, err = msgget (100, mode)
end
type = 42
data = "Answer to the Ultimate Question of Life"
- describe msgget:
- context with bad arguments:
badargs.diagnose (msgget, "(int, ?int)")
- it creates a queue:
expect (mq).not_to_be (nil)
expect (err).to_be (nil)
- describe msgsnd:
- context with bad arguments:
badargs.diagnose (msgsnd, "(int, int, string, ?int)")
- it sends a message:
ok, err = msgsnd (mq, type, data)
expect (ok).not_to_be (err)
- describe msgrcv:
- context with bad arguments:
badargs.diagnose (msgrcv, "(int, int, ?int, ?int)")
- it receives a message:
expect ({msgrcv (mq, 128)}).to_equal {type, data, nil}