我想用Cython訪問的一些標準C庫有很多標誌。 Cython文檔聲明我必須複製我需要的標題部分。當涉及到函數定義時,這很好。他們通常在任何地方複製,包括文檔。但那些神奇的數字呢?使用Cython訪問C頭幻數/標誌
如果我要打電話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
和PROT_EXEC
?
即使答案是沒有好的或正確的方法來做到這一點,我想聽聽它。我總是可以接受的是,只要我知道我不會錯過任何東西,就會感到麻煩。
可移植性的情況很糟糕:有些值由POSIX定義,有些則不是。 POSIX的版本幾乎是固定的,其他版本可能因平臺而異。 – 2010-02-05 11:53:45