gpt4 book ai didi

swift - 如何使用 Swift 在 dev_t 上调用 major 或 minor

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:28 25 4
gpt4 key购买 nike

我获得了一个 dev_t 类型的值,我想访问它的主要和次要版本号,不幸的是,在 C 中你会调用 major(theValue)minor(theValue) 它们没有在 Swift 中定义(可能是因为它们只是宏?)。

我应该怎么做?

谢谢

最佳答案

是的,问题是major/minor<sys/types.h> 中被定义为非平凡的宏:

#define major(x)        ((int32_t)(((u_int32_t)(x) >> 24) & 0xff))
#define minor(x) ((int32_t)((x) & 0xffffff))

因此在 Swift 中不可用。

一个可能的解决方案是定义辅助函数在桥接头文件中(宏可用的地方):

#include <sys/types.h>

static inline int32_t dev_major(dev_t x) { return major(x); }
static inline int32_t dev_minor(dev_t x) { return minor(x); }

然后可以在 Swift 中使用它们:

func foo(device: dev_t) {
let ma = dev_major(device)
let mi = dev_minor(device)
}

在Linux上可以调用Glibc中相应的库函数:

func foo(device: dev_t) {
let ma = gnu_dev_major(UInt64(device))
let mi = gnu_dev_minor(UInt64(device))
}

关于swift - 如何使用 Swift 在 dev_t 上调用 major 或 minor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48329508/

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