#go
#Вперед
Вопрос:
По-видимому, syscall.Dup2
не существует в системах ARM и syscall.Dup3
не существует в darwin (OSX). Это означает, что я мог бы использовать syscall.Dup3
, например, на ARM и syscall.Dup2
на других платформах.
Как бы я это сделал?
Ответ №1:
Напишите исходный файл оболочки для уникальной конфигурации кода.
PS: Я думаю, что Windows не поддерживает ни Dup2
то, ни Dup3
другое.
syscall_wrapper.go
// build !windows
// build !arm
// build !arm64
package mypkg
import (
"syscall"
)
func Dup2(oldfd int, newfd int) {
syscall.Dup2(oldfd, newfd)
}
syscall_wrapper_arm.go
// build !windows
// build arm arm64
package mypkg
import (
"syscall"
)
func Dup2(oldfd int, newfd int) {
syscall.Dup3(oldfd, newfd, 0)
}
Существенная часть, используемая, например, by go build
, — это // build
часть. Подробную информацию о том, как это использовать, можно найти здесь:
Ответ №2:
Для этого вы можете использовать golang.org/x/sys/unix
библиотеку
import (
"golang.org/x/sys/unix"
)
unix.Dup2(oldfd, newfd)