【问题标题】:Golang, calling a new system call in LinuxGolang,在 Linux 中调用一个新的系统调用
【发布时间】:2015-01-25 05:36:15
【问题描述】:

我有一个带有自定义系统调用的 Linux 内核。在 C 中,我可以使用标准 C 库 syscall() 通过其编号调用系统调用。如何在 Go 中调用这个新的系统调用?

在 C 语言中,在 Linux 上,也有一些宏可以发出所需的内联汇编以直接进行系统调用。

我不想破解 syscall_linux.go。

我看到在 Go 中,syscall_linux.go 由 perl 脚本 (mysyscall.pl) 处理以生成程序集。这也是相当复杂的,并且破解它来生成一个新的存根也似乎不必要的混乱。

【问题讨论】:

    标签: linux go


    【解决方案1】:

    syscall 包有 syscall.Syscallsyscall.Syscall6 可以直接进行系统调用。

    【讨论】:

    • 这些还不够。似乎 syscall.Syscall 用于 3 个 arg 系统调用。 C 有零、一、二等宏,所以我想他们可以制作一整套,但我没有看到。我的自定义系统调用有一个参数,一个 int32,顺便说一句。这是我使用 syscall.Syscall syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr) 找到的 Go 代码示例
    • 你试过什么?并非每个系统调用都有 3 或 6 个参数,只需使用 syscall 包中所需的参数即可。 (例如 Lstat 有 2 个参数并与 Syscall 或 Syscall6 一起使用:play.golang.org/p/S_BP1vf6xX
    • 太好了。是的,没有一个超过 6,所以只传递 0,例如,因为未使用的 args 应该可以工作。非常感谢。
    猜你喜欢
    • 2013-03-17
    • 2012-06-30
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2015-12-22
    • 2016-05-12
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多