से Wrapping FUSE मैं गो के साथ FUSE लपेटने के साथ खेल रहा हूं। हालांकि मैं struct fuse_operations
से निपटने के तरीके से अटक गया हूं। मैं type Operations C.struct_fuse_operations
घोषित करके ऑपरेशन स्ट्रक्चर का खुलासा नहीं कर सकता क्योंकि सदस्य कम मामले हैं, और मेरे शुद्ध-गो स्रोतों को सदस्यों को सेट करने के लिए सी-हैकरी का उपयोग करना होगा। इस मामले में मेरी पहली त्रुटि एक डिफ़ॉल्ट प्रतिलिपि कन्स्ट्रक्टर के गो समकक्ष होने के लिए "गेटैटर सेट नहीं कर सकती" है। मेरा अगला प्रयास GetAttr
, ReadLink
आदि की अपेक्षा रखने वाले इंटरफ़ेस का खुलासा करना है, और उसके बाद C.struct_fuse_operations
उत्पन्न करें और फ़ंक्शन पॉइंटर्स को बंद करने वाले इंटरफ़ेस को बंद करने के लिए बाध्य करें।गो
fuse.go:21[fuse.cgo1.go:23]: cannot use func literal (type func(*_Ctype_char, *_Ctype_struct_stat) int) as type *[0]uint8 in assignment
मैं क्या के इन सदस्यों को पारित करने के लिए यकीन नहीं है:
package fuse
// #include <fuse.h>
// #include <stdlib.h>
import "C"
import (
//"fmt"
"os"
"unsafe"
)
type Operations interface {
GetAttr(string, *os.FileInfo) int
}
func Main(args []string, ops Operations) int {
argv := make([]*C.char, len(args) + 1)
for i, s := range args {
p := C.CString(s)
defer C.free(unsafe.Pointer(p))
argv[i] = p
}
cop := new(C.struct_fuse_operations)
cop.getattr = func(*C.char, *C.struct_stat) int {}
argc := C.int(len(args))
return int(C.fuse_main_real(argc, &argv[0], cop, C.size_t(unsafe.Sizeof(cop)), nil))
}
package main
import (
"fmt"
"fuse"
"os"
)
type CpfsOps struct {
a int
}
func (me *CpfsOps) GetAttr(string, *os.FileInfo) int {
return -1;
}
func main() {
fmt.Println(os.Args)
ops := &CpfsOps{}
fmt.Println("fuse main returned", fuse.Main(os.Args, ops))
}
यह निम्न त्रुटि देता है:
यह मैं क्या मिल गया है (विवरण के कोड के बाद जारी है) है C.struct_fuse_operations
, और मैंने कुछ स्थानों में उल्लेख देखा है कि सी से वापस जाने के लिए गो कोड में कॉल करना संभव नहीं है।
यदि यह संभव है, तो मुझे क्या करना चाहिए? इंटरफ़ेस फ़ंक्शंस के लिए मैं "डिफ़ॉल्ट" मान कैसे प्रदान कर सकता हूं जो संबंधित C.struct_fuse_operations
सदस्य को पूर्ण पर सेट किया गया है?
मैं अपने उत्तरदायी चिंताओं को संबोधित करने वाले उत्तर में बक्षीस देना चाहता हूं, विशेष रूप से FUSE के लिए नहीं। –