在C ++中使用open和i2c

时间:2011-03-04 14:38:14

标签: c++ linux ioctl i2c

我意识到open()ioctl()在cpp对象中不起作用。如果在我的main()函数中调用它,我可以执行该操作,但在我的任何类中都没有。我有一个在我的主循环中运行的对象,它有另一个使文件系统调用的对象。

所以基本上在主循环中它可以打开(我的指针得到3,ioctl成功)。但是当我在对象中执行它时,它返回0表示打开(这不应该是错误)并且ioctl失败。

我知道我无法使用ios:: iostream选项,因为它们不适用于ioctl。如何在cpp对象中定期进行ioctl工作?

int add=0x4b;
int i2c_bus;

if(( i2c_bus = open( "/dev/i2c-0", O_RDWR )) < 0 )
{
    printf("Unable to open file /dev/i2c-0.\n");
}

if( ioctl( i2c_bus, I2C_SLAVE, add ) < 0 )
{
    printf("Open chip %d FAILED file %d\n",add, i2c_bus);
    return -1;
}
else 
{
    printf("Open chip %d Succeeded file %d\n\n",add, i2c_bus);
    return 1;
}

1 个答案:

答案 0 :(得分:2)

您已将open的结果分配给i2c_bus,但您在ioctl中使用了fd。从main移动后,您是否更改了变量名称?