亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Go 代碼修改 C void* 字節數組

從 Go 代碼修改 C void* 字節數組

Go
冉冉說 2021-08-16 18:10:21
基本上,我試圖用 Go 函數替換 C 程序中的 pread。我已經讓大部分結構正常工作,但我不知道如何用所需的字節填充緩沖區參數 (buf unsafe.Pointer)。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 mainimport "C"import "fmt"import "unsafe"//export ReadOverfunc 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()}有什么建議么?我什么都沒試過,我的想法都沒有了。
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

您只需要從中創建自己的切片,例如:


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

    slice := &reflect.SliceHeader{Data: uintptr(buf), Len: int(count), Cap: int(count)}

    rbuf := *(*[]byte)(unsafe.Pointer(slice))

    return C.int(copy(rbuf, newBuf))

}


查看完整回答
反對 回復 2021-08-16
  • 1 回答
  • 0 關注
  • 255 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號