- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我正在为 Rust 编写 FFI 包装器。我见过 libc::c_char 和 std::os::raw::c_char 的用法。我对 C 的了解非常少,我想知道是否有任何区别。如果我想通过 cffi
我正在用rust代码调用一些FFI函数。我对此有一些问题,我相信这是因为将CString转换为*const *const c_char时出现了错误。 函数签名是这样的, foo(strings: *c
我有一个用 Fortran(固定格式源)编写的程序,我需要将它与用 C++ 编写的库链接。我的程序和库都使用 MPI,所以我使用的是 mpif90 编译器。我有一个简短的界面interface.inc
在 C 头文件中,我有: long param_API test( ___OUT_ char Text[41]
我已经用 C/C++ 编写了一些 FFI 代码, use libc::c_char; use std::ffi::CString; type arr_type = [c_char; 20]; // a
我的 FFI 绑定(bind)返回一个具有固定大小 c_char 数组的结构,我想将它们转换为 std::ffi::CString 或 std::字符串。 看起来 CString::new 函数将指针
我正在使用 ctypes 位字段来剖析紧凑的二进制数据。我将一条记录的数据作为字符串填充到一个联合中,然后将关键字段作为整数提取出来。 当缓冲区中没有空值时,这非常有效,但任何嵌入的空值都会导致 cy
为了能够使用 C 库,我需要给函数一个 *mut c_char 参数。但我找不到从 str 获取它的方法。 我将 str 转换为 CString ,没关系,但是没有更多的方法从 CString 中获取
我有一个 C 函数: Node * first_element_by_path(const Node * node, const char * path, char delimiter); 还有一个
给定一个 std::path::Path,将其转换为空终止的 std::os::raw::c_char 的最直接方法是什么? (用于传递给采用路径的 C 函数)。 use std::ffi::CStr
我需要通过将其转换为数组来访问 char* 的内容 这是一个演示: from ctypes import * foo = (c_char * 4)() foo.value = "foo" print
在我的 C 头文件中我有: long TEST_API test( _IN____ const char arg1, _INOUT_ char arg2
我有一个 ctypes 字段,它是一个 POINTER(c_char) (根据文档,c_char_p 必须不适用于我的应用程序: https://docs.python.org/3.7/library
我正在使用 c_types 将 fortran 库与 python 连接起来。我在 python 中初始化结构,将它们传递给填充它们的 fortran,然后在 python 中读回它们。数字数组一切正
我已经在c库中建立了一个链接,对特定函数的调用给了我一个无用的错误消息(可能是因为我使用的是不安全的{}装饰器)。 消息是: ./build.sh: line 7: 44630 Bus error:
我有一个需要 *const std::os::raw::c_char 的 C 函数我在 Rust 中做了以下事情: use std::os::raw::c_char; use std::ffi::{C
我有一个 Vec 假装是一个大磁盘: lazy_static! { static ref DISK: Mutex> = Mutex::new(vec![0; 100 * 1024 * 1024
我有一个需要 *const std::os::raw::c_char 的 C 函数,我在 Rust 中完成了以下操作: use std::os::raw::c_char; use std::ffi::
我正在尝试加载一个进程列表,它在 32 位 python 上运行正常。但是,在 64 位上,我无法列出进程名称。代码如下。如果我将 szExeFile 的结构从 c_char 更改为 c_int 或
我正在尝试与 Rust 中的 C API 交互。他们用宏定义了几个字符串常量: #define kOfxImageEffectPluginApi "OfxImageEffectPluginAPI" 和
我是一名优秀的程序员,十分优秀!