在我的开发环境中,一些ioctl调用第一次会失败,如果我再次调用同样的ioctl,则返回成功。这是由于一些与硬件相关的时间同步问题。
因此,我们使用一些临时解决方案,如用一个宏来遮蔽所有ioctl,在该宏内部调用ioctl三次。
但是,该宏会引发编译错误。请提供解决此问题的建议。
示例代码:
因此,我们使用一些临时解决方案,如用一个宏来遮蔽所有ioctl,在该宏内部调用ioctl三次。
但是,该宏会引发编译错误。请提供解决此问题的建议。
示例代码:
#include <stdio.h>
int func (int a, int b, int c)
{
return -1;
}
#define IOCTL_WRAPPER(a,b,c) \
{ \
int i = 0, retval = 0; \
while (i < 3) \
{ \
retval = func (a, b, c); \
if (retval != -1) \
{ \
break; \
} \
i++; \
} \
retval; \
}
int main ()
{
int RetVal = 0;
RetVal = IOCTL_WRAPPER(1, 2, 3);
if (RetVal != -1)
{
printf ("\n pass \n");
}
else
{
printf ("\n fail \n");
}
return 0;
}
编译错误
a.c: In function âmainâ:
a.c:9:13: error: expected expression before â{â token
{ \
^
a.c:27:14: note: in expansion of macro âIOCTL_WRAPPERâ
RetVal = IOCTL_WRAPPER(1, 2, 3);
^
IOCTL_WRAPPER
宏实际上包装的是func
而不是ioctl
,这有点奇怪。这是在创建问题时改变了想法还是表明你有一个指向函数的指针,用于调用ioctl
?问题可能是多个线程修改函数指针引起的吗? - Jonathan Lefflerioctl()
后面的操作系统代码中。您应该为在那里解决此问题提出论据。是的,我理解这可能超出了您的职责范围,但那是提供修复的最合适的地方。 - Brian Cain