C:读取功能不会在断开连接的串行USB设备上返回错误

问题描述

我有一个打开/ 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;
    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。我希望它应该返回负数以指示错误(该设备不再可用)。

如何检测打开的设备已断开连接?

解决方法

read()返回零时,您可以在设备文件名上调用stat()。如果USB设备断开连接,则设备节点已消失,并且stat()将以errno == ENOENT返回-1。