我想用Cython访问的一些标准C库有大量的标志。Cython文档声明我必须复制我需要的头部分。当涉及到函数定义时,这是很好的。它们通常被复制到任何地方,包括文档。但是那些神奇的数字呢?在
如果我想调用mmap
,我总能找到函数定义并将其粘贴到.pxd文件中:
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
但是调用它需要大量的标志,比如PROT_READ
,MAP_ANONYMOUS
等等。我至少有两个问题:
首先,寻找这些数字的确切定义是一项烦人的工作。事实上,我宁愿编写一个.c文件并打印我需要的值。有没有更好的方法来查找给定标志的值,比如PROT_READ
?在
第二,这些数字有多稳定?在提取了我需要的所有值并将它们硬编码到Cython源代码之后,在不同平台上编译的机会有多大,比如PROT_READ
和{
即使答案是没有好的或适当的方法去做,我还是想听听。只要我知道我没有错过什么,我总是可以接受有些事情是很麻烦的。在
有几种可能的选择:
mmap
对象,然后将其交给Cython代码也就是说,这些数字非常非常稳定。如果它们改变了,每个使用mmap的C程序都必须重新编译,因为头中的标志包含在二进制文件中。在
EDIT:
mmap
是part of POSIX,但是粗略阅读并没有揭示在所有平台上标志是否必须是相同的值。在编写一个foo.c文件,其内容如下:
那就跑吧
^{pr2}$它将创建一个python文件来定义mman.h中的所有常量
显然,如果需要,可以对多个include执行此操作。在
生成的文件可能需要一点清理,但它会让您接近。在
要使用Cython中的这些常量,您不必像从C语言中那样精确地计算它们来自何处或它们是什么
只要定义(直接或间接)包含在foo.h中,就可以正常工作。在
相关问题 更多 >
编程相关推荐