C:读取功能不会在断开的串行USB设备上返回错误
我有一个打开/dev/ttyUSB*端口的C应用程序C:读取功能不会在断开的串行USB设备上返回错误,c,linux,serial-port,C,Linux,Serial Port,我有一个打开/dev/ttyUSB*端口的C应用程序 fd = open(portName.c_str(), O_RDWR | O_NOCTTY | O_NONBLOCK); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; option
fd = open(portName.c_str(), O_RDWR | O_NOCTTY | O_NONBLOCK);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_iflag &= (tcflag_t) ~(INLCR | IGNCR | ICRNL | IGNBRK);
options.c_oflag &= (tcflag_t) ~(OPOST);
options.c_cflag |= CS8;
options.c_cflag |= CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ISIG);
tcsetattr(fd, TCSANOW, &options);
struct serial_struct kernel_serial_settings;
if (ioctl(fd, TIOCGSERIAL, &kernel_serial_settings) == 0) {
kernel_serial_settings.flags |= ASYNC_LOW_LATENCY;
kernel_serial_settings..
ioctl(fd, TIOCSSERIAL, &kernel_serial_settings);
}
端口打开,我接收数据。但是,如果USB设备稍后断开连接,我调用读取功能:
nRead = _read(fd, buffer, length);
nRead将返回0。我认为它应该返回一个负数,以指示设备不再可用的错误
如何检测打开的设备已断开连接?当返回零时,可以调用设备文件名。如果USB设备断开连接,则设备节点已消失,stat将返回-1,errno==enoint。当返回零时,您可以调用设备文件名。如果USB设备断开连接,则设备节点已消失,stat将返回-1,errno==enoint。@Ryker我想是的-问题是如何检测打开的设备断开连接?如果stat在enoint中出错,这意味着它不存在。因为它以前存在,现在不存在了,所以从这个结果可以得出一个很好的推论。您可以在文件描述符上使用fstat。这类似于在TCP连接断开时读取0。@AndrewHenle-谢谢。很好的解释。@Ryker我想是的-问题是我如何检测到打开的设备断开了连接?如果stat在enoint中出错,这意味着它不存在。因为它以前存在,现在不存在了,所以从这个结果可以得出一个很好的推论。您可以在文件描述符上使用fstat。这类似于在TCP连接断开时读取0。@AndrewHenle-谢谢。很好的解释。