除了使用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:

C++相关问答推荐

需要大整数和浮点数.使用long long int和long double

MISRA C:2012 11.3违规强制转换(FLOAT*)到(uint32_t*)

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

如何在c++中包装返回空*的函数

如何在C中使printf不刷新标准输出?

错误Cygwin_Except::Open_stackdupfile:正在转储堆栈跟踪是什么?

如何确保在C程序中将包含uft8字符的字符串正确写入MySQL?

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

For循环中的变量行为不符合预期.[C17]

关于";*(++p)->;t";、&++p->;t";和&q;++*p->;t";的问题

如何使这个While循环在新行上结束

int * 指向int的哪个字节?

使用正则表达式获取字符串中标记的开始和结束

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

在C中打印指针本身

一元运算符

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

在带中断的循环缓冲区中使用 易失性

我如何(合规地)从 tmpfile() 读取?