Системные вызовы Linux используются напрямую, без загрузки библиотеки, как именно зависит от того, какой системный вызов вы хотите выполнить.
В качестве примера я буду использовать системный вызов Linux getpid (), который возвращает идентификатор процесса вызывающего процесса (в данном случае нашего процесса).
package main
import (
"fmt"
"syscall"
)
func main() {
pid, _, _ := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0)
fmt.Println("process id: ", pid)
}
Я фиксирую результат системного вызова в pid, этот конкретный вызов не возвращает ошибок, поэтому я использую пустые идентификаторы для остальных возвратов. Системный вызов возвращает два uintptr и 1 ошибку.
Как видите, я также могу просто передать 0 для остальных аргументов функции, поскольку мне не нужно передавать аргументы этому системному вызову.
Сигнатура функции: func Syscall (trap uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno).
Для получения дополнительной информации см. https://golang.org/pkg/syscall/.
person
sbrk
schedule
03.04.2017
go get -u github.com/rainycape/dl
. - person Tim Cooper   schedule 02.12.2015go get -u gopkg.in/rainycape/dl.v0
;) - person Markus W Mahlberg   schedule 02.12.2015syscall.go
и*syscall_linux[_$GOARCH].go
среды выполнения Go. Также может быть интересен пакетgolang.org/x/sys
. - person kostix   schedule 02.12.2015