Golang: How to use syscall.Syscall on Linux?

前端 未结 1 1092
长情又很酷
长情又很酷 2021-01-04 10:52

There is a very nice description about loading a shared library and calling a function with the syscall package on Windows (https://github.com/golang/go/wiki/WindowsDLLs). H

相关标签:
1条回答
  • 2021-01-04 11:34

    Linux syscalls are used directly without loading a library, exactly how depends on which system call you would like to perform.

    I will use the Linux syscall getpid() as an example, which returns the process ID of the calling process (our process, in this case).

    package main
    
    import (
        "fmt"
        "syscall"
    )
    
    func main() {
        pid, _, _ := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0)
        fmt.Println("process id: ", pid)
    }
    

    I capture the result of the syscall in pid, this particular call returns no errors so I use blank identifiers for the rest of the returns. Syscall returns two uintptr and 1 error.

    As you can see I can also just pass in 0 for the rest of the function arguments, as I don't need to pass arguments to this syscall.

    The function signature is: func Syscall(trap uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno).

    For more information refer to https://golang.org/pkg/syscall/

    0 讨论(0)
提交回复
热议问题