mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 23:58:50 +00:00
posix: add package
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package posix
|
||||
|
||||
import "core:c"
|
||||
|
||||
when ODIN_OS == .Darwin {
|
||||
foreign import lib "system:System.framework"
|
||||
} else {
|
||||
foreign import lib "system:c"
|
||||
}
|
||||
|
||||
// sched.h - execution scheduling
|
||||
|
||||
foreign lib {
|
||||
/*
|
||||
Returns the minimum for the given scheduling policy.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_get_priority_max.html ]]
|
||||
*/
|
||||
sched_get_priority_max :: proc(policy: Sched_Policy) -> c.int ---
|
||||
|
||||
/*
|
||||
Returns the maximum for the given scheduling policy.
|
||||
|
||||
Returns: -1 (setting errno) on failure, the maximum on success
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_get_priority_max.html ]]
|
||||
*/
|
||||
sched_get_priority_min :: proc(policy: Sched_Policy) -> c.int ---
|
||||
|
||||
/*
|
||||
Forces the running thread to relinquish the processor until it again becomes the head of its thread list.
|
||||
*/
|
||||
sched_yield :: proc() -> result ---
|
||||
|
||||
/* NOTE: unimplemented on darwin (I think?).
|
||||
/*
|
||||
Get the scheduling params of a process, pid of 0 will return that of the current process.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_getparam.html ]]
|
||||
*/
|
||||
sched_getparam :: proc(pid: pid_t, param: ^sched_param) -> result ---
|
||||
/*
|
||||
Sets the scheduling parameters of the given process, pid of 0 will set that of the current process.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setparam.html ]]
|
||||
*/
|
||||
sched_setparam :: proc(pid: pid_t, param: ^sched_param) -> result ---
|
||||
|
||||
/*
|
||||
Returns the scheduling policy of a process, pid of 0 will return that of the current process.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_getscheduler.html ]]
|
||||
*/
|
||||
sched_getscheduler :: proc(pid: pid_t) -> Sched_Policy ---
|
||||
|
||||
/*
|
||||
Sets the scheduling policy and parameters of the process, pid 0 will be the current process.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html ]]
|
||||
*/
|
||||
sched_setscheduler :: proc(pid: pid_t, policy: Sched_Policy, param: ^sched_param) -> result ---
|
||||
|
||||
/*
|
||||
Updates the timespec structure to contain the current execution time limit for the process.
|
||||
pid of 0 will return that of the current process.
|
||||
|
||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_rr_get_interval.html ]]
|
||||
*/
|
||||
sched_rr_get_interval :: proc(pid: pid_t, interval: ^timespec) -> result ---
|
||||
*/
|
||||
}
|
||||
|
||||
Sched_Policy :: enum c.int {
|
||||
// Error condition of sched_getscheduler.
|
||||
ERROR = -1,
|
||||
// First in-first out (FIFO) scheduling policy.
|
||||
FIFO = SCHED_FIFO,
|
||||
// Round robin scheduling policy.
|
||||
RR = SCHED_RR,
|
||||
// Another scheduling policy.
|
||||
OTHER = SCHED_OTHER,
|
||||
}
|
||||
|
||||
when ODIN_OS == .Darwin {
|
||||
|
||||
SCHED_FIFO :: 4
|
||||
SCHED_RR :: 2
|
||||
// SCHED_SPORADIC :: 3 NOTE: not a thing on freebsd, netbsd and probably others, leaving it out
|
||||
SCHED_OTHER :: 1
|
||||
|
||||
} else when ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD {
|
||||
|
||||
SCHED_FIFO :: 1
|
||||
SCHED_RR :: 3
|
||||
SCHED_OTHER :: 2
|
||||
|
||||
} else when ODIN_OS == .NetBSD {
|
||||
|
||||
SCHED_OTHER :: 0
|
||||
SCHED_FIFO :: 1
|
||||
SCHED_RR :: 2
|
||||
|
||||
} else {
|
||||
#panic("posix is unimplemented for the current target")
|
||||
}
|
||||
Reference in New Issue
Block a user