Linux 如何使用c++;

Linux 如何使用c++;,linux,serial-port,Linux,Serial Port,我有个大问题。目前,我正在通过以下挂钩访问串行端口: fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY ) 然后,我使用下面的代码块从中读取 i = select( fd + 1, &rfds, NULL, NULL, &tv ) ... iLen = read( fd, buf, MAX_PACKET_LEN ) 问题是,在阅读之前,我需要检测是否存在缓冲区溢出。串行端口级和内部tty翻转缓冲区 我们尝试了cat/proc/tty/dri

我有个大问题。目前,我正在通过以下挂钩访问串行端口:

fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY )
然后,我使用下面的代码块从中读取

i = select( fd + 1, &rfds, NULL, NULL, &tv )
...
iLen = read( fd, buf, MAX_PACKET_LEN )
问题是,在阅读之前,我需要检测是否存在缓冲区溢出。串行端口级和内部tty翻转缓冲区

我们尝试了
cat/proc/tty/driver/serial
,但似乎没有列出超限(见下面的输出)


根据内核源代码,您应该使用TIOCGICOUNT ioctl。第三个ioctl参数应该是指向
中定义的以下结构的指针:

/*
 * Serial input interrupt line counters -- external structure
 * Four lines can interrupt: CTS, DSR, RI, DCD
 */
struct serial_icounter_struct {
        int cts, dsr, rng, dcd;
        int rx, tx;
        int frame, overrun, parity, brk;
        int buf_overrun;
        int reserved[9];
};
我不知道是否每个车手都能检测到所有情况。

黑暗圣堂武士

您的串行驱动程序应更新icount.frame/overflow错误


serial_core中的struct uart_port.h具有成员struct uart_icount,应根据接收到的中断在平台串行设备驱动程序中进行更新。

嘿,谢谢你,但我们的系统似乎没有更新“Overflow”和“buf_Overflow”字段。知道为什么吗?
/*
 * Serial input interrupt line counters -- external structure
 * Four lines can interrupt: CTS, DSR, RI, DCD
 */
struct serial_icounter_struct {
        int cts, dsr, rng, dcd;
        int rx, tx;
        int frame, overrun, parity, brk;
        int buf_overrun;
        int reserved[9];
};