VxWorks 设置 FIONBIO 的标准方法是使用ioctl()
,而不是fcntl()
。FIONBIO 的文档以此为例,显然不会编译,因为on
没有数据类型:
on = TRUE;
status = ioctl (sFd, FIONBIO, &on);
我在网上看到过使用类似这样的东西(本质上是相同的东西)的示例用法:
int on = 1;
ioctl(fd, FIONBIO, &on);
但是,文档说原型ioctl()
是ioctl(int, int, int)
,我收到有关无法转换int*
为的错误int
。如果我将值作为 传递int
,我只会得到一个致命的内核任务级异常。
这是我当前的代码:
int SetBlocking(int sockfd, bool blocking)
{
int nonblock = !blocking;
return ioctl(sockfd, FIONBIO, &nonblock);
}
返回错误:
error: invalid conversion from `int*' to `int'
initializing argument 3 of `int ioctl(int, int, int)'