除了使用cImport之外,有没有办法在Zig中进行系统调用? 现在,我已经把它用在这样的东西上:
const c = @cImport({
@cInclude("stdlib.h");
});
// ...
const result: c_int = c.system(cmd);
虽然这种方法运行得很好,但我希望以"之字形方式"来完成它,而不必从C语言中导入东西.
除了使用cImport之外,有没有办法在Zig中进行系统调用? 现在,我已经把它用在这样的东西上:
const c = @cImport({
@cInclude("stdlib.h");
});
// ...
const result: c_int = c.system(cmd);
虽然这种方法运行得很好,但我希望以"之字形方式"来完成它,而不必从C语言中导入东西.
使用C的system()
函数的替代方法是在Zig中使用ChildProcess
:
const std = @import("std");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer std.debug.assert(gpa.deinit() == .ok);
const allocator = gpa.allocator();
const result = try std.ChildProcess.exec(.{
.allocator = allocator,
.argv = &[_][]const u8{ "date" },
});
defer {
allocator.free(result.stdout);
allocator.free(result.stderr);
}
std.log.info("stdout: {s}", .{ result.stdout });
std.log.info("stderr: {s}", .{ result.stderr });
}
这将打印以下内容:
$ zig build run
info: stdout: Tue, Aug 8, 2023 1:45:02 PM
info: stderr: