我正在尝试使用 c2hs 编写与某些 ioctl 函数(特别是获取和设置窗口大小)的快速绑定。这是我所拥有的相关部分:
{-# LANGUAGE ForeignFunctionInterface #-}
#include <sys/ttycom.h>
#include <sys/ioctl.h>
module A where
import Foreign.Storable
import Foreign.Ptr
import Foreign.C
{#enum define TIO {TIOCGWINSZ as GetWinsz, TIOCSWINSZ as SetWinsz} deriving (Eq) #}
(完整代码可在https://gist.github.com/nc6/8977936获得)
当我尝试编译它时,我得到:
c2hs:尚未实现功能:GenBind.evalConstCExpr:尚未实现强制转换。
我猜这个问题的原因是 C consts 是使用Haskell 预处理器无法处理的一些辅助函数 (_IOW
和) 定义的。_IOR
但是,目前尚不清楚如何最好地解决此问题。我尝试在一个#c ... #endc
部分中定义一个枚举并使用直enum
钩,但这给出了完全相同的问题。
我应该放弃使用 c2hs 并使用其他东西吗?有没有解决这个问题的明智方法,而不是简单地硬编码常量值?