gpt4 book ai didi

rust - 我如何在 *c_char 和 Vec 之间进行 memcpy

转载 作者:行者123 更新时间:2023-11-29 08:10:45 26 4
gpt4 key购买 nike

我有一个 Vec<u8> 假装是一个大磁盘:

lazy_static! {
static ref DISK: Mutex<Vec<u8>> = Mutex::new(vec![0; 100 * 1024 * 1024]);
}

我的 Rust 代码(直接从 C 调用)有一些函数可以读写这个磁盘,但我不明白我会在这些函数中写什么到磁盘和 C 调用者之间的 memcpy(或者如果 Vec是在这里使用的最佳结构):

extern "C" fn pread(
_h: *mut c_void,
buf: *mut c_char,
_count: uint32_t,
offset: uint64_t,
_flags: uint32_t,
) -> c_int {
// ?
}

extern "C" fn pwrite(
_h: *mut c_void,
buf: *const c_char,
_count: uint32_t,
offset: uint64_t,
_flags: uint32_t,
) -> c_int {
// ?
}

最佳答案

使用std::ptr::copy_nonoverlapping .

use std::ptr;

// Copy from disk to buffer
extern "C" unsafe fn pread(
_h: *mut c_void,
buf: *mut c_char,
count: uint32_t,
offset: uint64_t,
_flags: uint32_t,
) -> c_int {
// TODO: bounds check
ptr::copy_nonoverlapping(&DISK.lock()[offset], buf as *mut u8, count);
count
}

关于rust - 我如何在 *c_char 和 Vec<u8> 之间进行 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54590437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com