gpt4 book ai didi

C - 将 void* 转换为 int 内核的最佳实践

转载 作者:行者123 更新时间:2023-12-05 03:05:49 25 4
gpt4 key购买 nike

我正在为 Linux 内核编写一个模块,我想在文件私有(private)数据中存储一个 int 值。

本质上,我所做的是:file->private_data = (void*) x其中 x 是一些 int 值。

现在,我想将 int 作为值访问回来。

Using int val = (int) file->private_data 在编译期间给出了一个 cast from pointer to integer of different size 警告,这是合理的,因为它可能会导致64 位系统上的问题。

我也无法使用 uintptr_t,因为我在内核中工作并且我无权访问库。

使用 double 似乎不合适。

我的问题是:这样做的最佳做法应该是什么?

最佳答案

在gcc世界中(Linux内核是由gcc编译的),long(或unsigned long)与指针大小相同。将指针转换为整数并返回时,您可以使用此功能:

// store
file->private_data = (void*)(long) x;
// load
int val = (int) (long) file->private_data;

注意:此答案专门针对Linux 内核 编程。

对于用户空间应用程序,建议的方法可能被视为不良做法,或者只是错误

关于C - 将 void* 转换为 int 内核的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50303896/

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