gpt4 book ai didi

python - 使用 Cython 访问 C 头魔数(Magic Number)/标志

转载 作者:太空狗 更新时间:2023-10-30 02:06:38 25 4
gpt4 key购买 nike

我想使用 Cython 访问的一些标准 C 库有大量标志。 Cython 文档声明我必须复制我需要的 header 部分。当涉及到函数定义时,这很好。它们通常随处复制,包括文档。但是那些神奇的数字呢?

如果我想调用mmap,我总能找到函数定义并将其粘贴到.pxd 文件中:

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)

但调用它需要大量标志,例如 PROT_READMAP_ANONYMOUS 等等。我至少有两个问题:

首先,准确查找这些数字的定义位置是一项烦人的工作。事实上,我宁愿写一个 .c 文件并打印我需要的值。有没有更好的方法来查找给定标志的值,例如 PROT_READ

其次,这些数字有多稳定?在提取了我需要的所有值并将它们硬编码到我的 Cython 源代码之后,在不同平台上进行编译的可能性有多大,比如说 PROT_READPROT_EXEC

即使答案是没有好的或适当的方法来做,我也想听听。只要我知道我没有遗漏任何东西,我总是可以接受某些东西很麻烦。

最佳答案

要在 Cython 中使用这些常量,与在 C 中一样,您不需要确切地弄清楚它们来自哪里或它们是什么。例如,您的 .pxd 文件可以看起来像

cdef extern from "foo.h":
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
cdef int PROT_READ
cdef int MAP_ANONYMOUS
...

只要定义(直接或间接)包含在 foo.h 中,就可以正常工作。

关于python - 使用 Cython 访问 C 头魔数(Magic Number)/标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206557/

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