我是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.int
sem_getvalue
使用errno
,所以你应该用它来调用它ret, err := C.sem_getvalue...
归档时间: |
|
查看次数: |
1470 次 |
最近记录: |