Standart library contains wrappers for sigprocmask() function and for sigset_t type,
but I could not find wrappers for macro group from man sigsetops
in zig files.
How can I use these C macros in Zig program?
partially solved
pub fn getSignalId(signo: u6) !i32 {
var sset: SigSet = undefined;
// block the signal
std.os.linux.sigemptyset(&sset); // error :(
std.os.linux.sigaddset(&sset, signo);
sigProcMask(SIG.BLOCK, &sset, null);
return signalFd(-1, &sset, signo);
}
$ /opt/zig/zig build-exe 2-test.zig
event-sources.zig:93:21: error: struct 'os.linux.os.linux' has no member named 'sigemptyset'
std.os.linux.sigemptyset(&sset);
~~~~~~~~~~~~^~~~~~~~~~~~
/opt/zig/lib/std/os/linux.zig:1:1: note: struct declared here
$ grep -rI "fn sigaddset" /opt/zig/lib/
/opt/zig/lib/std/os/linux.zig:pub fn sigaddset(set: *sigset_t, sig: u6) void {
/opt/zig/lib/std/c/darwin.zig:pub fn sigaddset(set: *sigset_t, signo: u5) void {
so we have sigaddset
, but there is no sigemptyset
.
solved
pub fn getSignalId(signo: u6) !i32 {
var sset: SigSet = std.os.empty_sigset;
// block the signal
std.os.linux.sigaddset(&sset, signo);
sigProcMask(SIG.BLOCK, &sset, null);
return signalFd(-1, &sset, signo);
}
see sigemptyset is missing in lib/std/os/linux.zig · Issue #12859 · ziglang/zig · GitHub