我是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)
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jim*_*imB 11
该消息令人困惑,直到您意识到它...是C函数的可变部分.你不能直接在Go中使用C variadic函数,所以你必须在C中编写一个小包装来调用sem_open.
还有几点说明:
C.free 应该叫 C.free(unsafe.Pointer(name))val 需要成为一个 *C.intsem_getvalue使用errno,所以你应该用它来调用它ret, err := C.sem_getvalue...| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |