意外类型:......在 Go 中使用 cgo

我是 Go 的新手,正在尝试学习如何从 Go 调用 C。我编写了这个程序来打开一个命名的信号量,获取值并将其打印到屏幕上。当我运行它时,go build semvalue.go我收到错误: ./semvalue.go:16:14: unexpected type: ...


这是什么意思?我究竟做错了什么?


package main


import "fmt"


// #cgo LDFLAGS: -pthread

// #include <stdlib.h>

// #include <fcntl.h>

// #include <sys/stat.h>

// #include <semaphore.h>

import "C"


func main() {

    name := C.CString("/fram")

    defer C.free(name)


    fram_sem := C.sem_open(name, C.O_CREAT, C.mode_t(0644), C.uint(1))

    var val int

    ret := C.sem_getvalue(fram_sem, val)

    fmt.Println(val)

    C.sem_close(fram_sem)

}

谢谢你。


肥皂起泡泡
浏览 326回答 1
1回答

隔江千里

该消息令人困惑,直到您意识到...是 C 函数的可变参数部分。您不能直接从 Go 中使用 C 可变参数函数,因此您必须在 C 中编写一个小包装器来调用sem_open.还有一些注意事项:C.free&nbsp;应该用&nbsp;C.free(unsafe.Pointer(name))val&nbsp;需要是一个&nbsp;*C.intsem_getvalue使用errno,所以你应该用ret, err := C.sem_getvalue...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go