< 返回版块

jojo 发表于 2021-08-13 17:00

Tags:ffi libc

比如我想从标准输入读取单个字符(通过 libc::fgetc函数)如下
pub unsafe extern "C" fn fgetc(stream: *mut FILE) -> c_int
但我发现 libc::FILE 竟是个枚举??
pub enum FILE {}
即使我将 标准输入 转换 成 c语言的文件描述符fd,但也没法变成 libc::FILE

评论区

写评论
Aya0wind 2021-08-13 18:54

rust的libc库单纯就是经典libc的binding,一模一样的,你要看这个不如直接去看讲c语言libc的博客,这个到处都是。

--
👇
jojo: 原来如此,谢谢😘。
我找了挺久也没找到。。。有没有相关博客介绍libc库,因为我用lib文档自带搜索栏找,它也找不到相关Param或Return

--
👇
Aya0wind: 调用fdopen函数,可以把fd转换为FILE*。对于stdin就是fd等于0,这个函数在libc crate里有。

pub unsafe extern "C" fn fdopen(
    fd: c_int, 
    mode: *const c_char
) -> *mut FILE
作者 jojo 2021-08-13 17:32

原来如此,谢谢😘。
我找了挺久也没找到。。。有没有相关博客介绍libc库,因为我用lib文档自带搜索栏找,它也找不到相关Param或Return

--
👇
Aya0wind: 调用fdopen函数,可以把fd转换为FILE*。对于stdin就是fd等于0,这个函数在libc crate里有。

pub unsafe extern "C" fn fdopen(
    fd: c_int, 
    mode: *const c_char
) -> *mut FILE
Aya0wind 2021-08-13 17:20

调用fdopen函数,可以把fd转换为FILE*。对于stdin就是fd等于0,这个函数在libc crate里有。

pub unsafe extern "C" fn fdopen(
    fd: c_int, 
    mode: *const c_char
) -> *mut FILE
1 共 3 条评论, 1 页