我是 Go 的新手,正在嘗試學(xué)習(xí)如何從 Go 調(diào)用 C。我編寫了這個(gè)程序來(lái)打開(kāi)一個(gè)命名的信號(hào)量,獲取值并將其打印到屏幕上。當(dāng)我運(yùn)行它時(shí),go build semvalue.go我收到錯(cuò)誤: ./semvalue.go:16:14: unexpected type: ...這是什么意思?我究竟做錯(cuò)了什么?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貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
該消息令人困惑,直到您意識(shí)到...
是 C 函數(shù)的可變參數(shù)部分。您不能直接從 Go 中使用 C 可變參數(shù)函數(shù),因此您必須在 C 中編寫一個(gè)小包裝器來(lái)調(diào)用sem_open
.
還有一些注意事項(xiàng):
C.free
應(yīng)該用C.free(unsafe.Pointer(name))
val
需要是一個(gè)*C.int
sem_getvalue
使用errno
,所以你應(yīng)該用ret, err := C.sem_getvalue...
- 1 回答
- 0 關(guān)注
- 352 瀏覽
添加回答
舉報(bào)
0/150
提交
取消