2014-11-10 11 views
5

में केगो के साथ मैं जाने के लिए नया हूं और सीखने की कोशिश कर रहा हूं कि सी से कॉल कैसे करें। मैंने इस कार्यक्रम को नामित सेमफोर खोलने के लिए लिखा है, मूल्य प्राप्त करें और इसे स्क्रीन पर प्रिंट करें। ./semvalue.go:16:14: unexpected type: ...अप्रत्याशित प्रकार: ... गो

इसका क्या मतलब है: जब मैंने इसे go build semvalue.go चलाने मैं त्रुटि मिलती है? मैं क्या गलत कर रहा हूं?

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) 
} 

धन्यवाद।

उत्तर

8

संदेश भ्रमित है, जब तक आपको एहसास न हो कि ... एक सी फ़ंक्शन का विविध भाग है। आप सी से सीधे सी वैरिएडिक फ़ंक्शंस का उपयोग नहीं कर सकते हैं, इसलिए आपको sem_open पर कॉल करने के लिए सी में एक छोटा रैपर लिखना होगा।

एक जोड़े को और सूचनाएं:

  • C.freeC.free(unsafe.Pointer(name))
  • val जरूरतों के साथ बुलाया जाना चाहिए होने के लिए *C.int
  • sem_getvalueerrno का उपयोग करता है, ताकि आप इसे ret, err := C.sem_getvalue...
साथ बुलाना चाहिए एक