1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
discard """
matrix: "--mm:refc; --mm:orc"
disabled: windows
"""
# Test Posix interface
when not defined(windows):
import posix
import std/[assertions, syncio]
var
u: Utsname
discard uname(u)
writeLine(stdout, u.sysname)
writeLine(stdout, u.nodename)
writeLine(stdout, u.release)
writeLine(stdout, u.machine)
when not (defined(nintendoswitch) or defined(macos) or defined(macosx)):
block:
type Message = object
value: int
const MQ_PATH: cstring = "/top_level_file"
const MQ_PRIORITY: cuint = 170
const MQ_MESSAGE_SIZE: csize_t = csize_t(sizeof(Message))
let mqd_a: posix.MqAttr = MqAttr(mq_maxmsg: 10, mq_msgsize: clong(MQ_MESSAGE_SIZE))
let writable: posix.Mqd = posix.mq_open(
MQ_PATH,
posix.O_CREAT or posix.O_WRONLY or posix.O_NONBLOCK,
posix.S_IRWXU,
addr(mqd_a)
)
let readable: posix.Mqd = posix.mq_open(
MQ_PATH,
posix.O_RDONLY or posix.O_NONBLOCK,
posix.S_IRWXU,
addr(mqd_a)
)
let sent: Message = Message(value: 88)
block:
let success: int = writable.mq_send(
cast[cstring](sent.addr),
MQ_MESSAGE_SIZE,
MQ_PRIORITY
)
doAssert success == 0, $success
block:
var buffer: Message
var priority: cuint
let bytesRead: int = readable.mq_receive(
cast[cstring](buffer.addr),
MQ_MESSAGE_SIZE,
priority
)
doAssert buffer == sent
doAssert bytesRead == int(MQ_MESSAGE_SIZE)
block:
var rl: RLimit
var res = getrlimit(RLIMIT_STACK, rl)
doAssert res == 0
# save old value
let oldrlim = rl.rlim_cur
# set new value
rl.rlim_cur = rl.rlim_max - 1
res = setrlimit(RLIMIT_STACK, rl)
doAssert res == 0
# get new value
var rl1: RLimit
res = getrlimit(RLIMIT_STACK, rl1)
doAssert res == 0
doAssert rl1.rlim_cur == rl.rlim_max - 1
# restore old value
rl.rlim_cur = oldrlim
res = setrlimit(RLIMIT_STACK, rl)
doAssert res == 0
|