const std = @import("std"); const builtin = @import("builtin"); const windows = @import("windows.zig"); const posix = std.posix; /// pipe() that works on Windows and POSIX. For POSIX systems, this sets /// CLOEXEC on the file descriptors. pub fn pipe() ![2]posix.fd_t { switch (builtin.os.tag) { else => return try posix.pipe2(.{ .CLOEXEC = true }), .windows => { var read: windows.HANDLE = undefined; var write: windows.HANDLE = undefined; if (windows.exp.kernel32.CreatePipe(&read, &write, null, 0) == 0) { return windows.unexpectedError(windows.kernel32.GetLastError()); } return .{ read, write }; }, } }