1
В принципе, я пытаюсь заменить pread в программе на C функцией Go. У меня большая часть структуры работает, но я не могу понять, как заполнить аргумент буфера (buf unsafe.Pointer) с нужными байтами.Изменение байтового массива C void * из кода Go
Часть daemon.c:
static int preadShim(int fd, void *buf, size_t count, off_t offset) {
//return pread(fd, buf, count, offset);
return ReadOver(fd, buf, count, offset);
}
В файле Golang:
package main
import "C"
import "fmt"
import "unsafe"
//export ReadOver
func ReadOver(fd C.int, buf unsafe.Pointer, count C.int, offset C.int) C.int{
fmt.Println("ReadOver got called")
newBuf := []byte("injected bytes")
//TODO: copy newBuf over buf
return count
}
Другой Golang файл:
package main
// #include "daemon.c"
import "C"
import "fmt"
func main() {
//Start C program
C.start()
}
Любые предложения? Я ничего не пробовал, и у меня все идеи.
Woot! Оно работает! Благодаря тонну! – Moolignant
Я пробовал маршрут C.GoBytes, но на самом деле он не меняет буфер на стороне C. – Moolignant
@ Moolingant Я просто впился в него, и вы правы, он делает копию, я исправлю ответ. – OneOfOne