1

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

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

我知道我不能使用ios::iostream 选项,因为它们不适用于ioctl. 如何使常规 ioctl 在 cpp 对象中工作?

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;
}
4

1 回答 1

2

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

于 2011-03-04T14:40:14.880 回答