我正在Linux上用C ++开发一个程序,它与USB2Serial适配器交互以从远程终端获取一些信息。我可以使用以下代码在Windows上设置IOCTL:
#define IOCTL_SERIAL_XOFF_COUNTER CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS)
unsigned char xoff_counter[] = {0xd0,0x07,0x00,0x00,0x05,0x00,0x00,0x00,0x13,0x00,0x00,0x00};
bool result = DeviceIoControl(file,IOCTL_SERIAL_XOFF_COUNTER,
&xoff_counter, sizeof(xoff_counter),
NULL,0,
&junk,
&o);
我尝试使用以下代码在Linux上执行相同的操作:
#define SERIAL_XOFF_COUNTER 28
unsigned char xoff_counter[] = {0xd0,0x07,0x00,0x00,0x05,0x00,0x00,0x00,0x13,0x00,0x00,0x00};
int retVal = ioctl(fd,SERIAL_XOFF_COUNTER,xoff_counter);
if(retVal < 0){
cout << "Error while setting ioctl:"<<strerror(errno)<<endl;
}
运行程序时出现错误:
Error while setting ioctl:Inappropriate ioctl for device
如果有人之前曾在这些ioctls中工作,请告诉我这个标志的Linux等价物。
TIA!
答案 0 :(得分:1)
Linux中没有串行ioctl。 ioctl特定于Windows串行驱动程序。 XON / XOFF协议没有定义计数器,所以我无法想象这是用于什么。 (也许Windows正在计算收到的XOFF字符的数量,但只是一个推测)
参见linux的 termios(3)手册页,查看为rs232终端控件定义的ioctls。