披露:我对 C 很陌生。如果您能详细解释任何答案,我将不胜感激。
我正在编写一个 linux 内核模块,并且在我正在编写的一个函数中,我需要将一个结构复制到用户空间,如下所示:
typedef struct
{
uint32_t someProperty;
uint32_t numOfFruits;
uint32_t *arrayOfFruits;
} ObjectCapabilities;
我正在实现的 API 的文档将arrayOfFruits
成员描述为“一个大小数组,numOfFruits
其中每个元素都是 FRUIT_TYPE 常量”。我很困惑如何做到这一点,因为 arrayOfFruits 是一个指针。当我构建结构copy_to_user
时ObjectCapabilities
,它只会将指针 arrayOfFruits
复制到用户空间。
用户空间如何连续访问数组的元素?这是我的尝试:
ObjectCapabilities caps;
caps.someProperty = 1024;
caps.numOfFruits = 3;
uint32_t localArray[] = {
FRUIT_TYPE_APPLE,
FRUIT_TYPE_ORANGE,
FRUIT_TYPE_BANANA
};
caps.arrayOfFruits = localArray;
然后对于副本...我可以这样做吗?
copy_to_user((void *)destination, &caps, (sizeof(caps) + (sizeof(localArray) / sizeof((localArray)[0]))));