我是 Go 的新手,正在尝试学习如何从 Go 调用 C。我编写了这个程序来打开一个命名的信号量,获取值并将其打印到屏幕上。当我运行它时,go build semvalue.go我收到错误: ./semvalue.go:16:14: unexpected type: ...这是什么意思?我究竟做错了什么?package mainimport "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)}谢谢你。
1 回答
隔江千里
TA贡献1906条经验 获得超10个赞
该消息令人困惑,直到您意识到...
是 C 函数的可变参数部分。您不能直接从 Go 中使用 C 可变参数函数,因此您必须在 C 中编写一个小包装器来调用sem_open
.
还有一些注意事项:
C.free
应该用C.free(unsafe.Pointer(name))
val
需要是一个*C.int
sem_getvalue
使用errno
,所以你应该用ret, err := C.sem_getvalue...
- 1 回答
- 0 关注
- 325 浏览
添加回答
举报
0/150
提交
取消