我怎么能在D中模仿ioctl?

时间:2017-09-24 17:34:54

标签: linux-device-driver embedded-linux d i2c

我想写一个包装I2C device driver (/dev interface -> I2C device files/character device files)的D类。为了在实现过程中打破对HW的依赖,我想模拟ioctl()。我怎样才能最轻松地做到这一点?

1 个答案:

答案 0 :(得分:4)

writeln("hey ioctl, your mother is a hamster and your father smells of elderberries!");

不,我只是在开玩笑。

我要做的就是写一个看起来相同的假ioctl函数并使用import和version来欺骗它:

import core.sys.posix.sys.ioctl;

version(unittest)
int ioctl(int d, int request, ...) {
        import std.stdio;
        writeln("its a fake!");
        return 0;
}

void main() {
        ioctl(0, 0);
}

使用和不使用单元测试进行编译+运行将产生不同的结果。可以调用本地函数而不是真函数。