gpt4 book ai didi

linux - 如何使用 C++ 在 Linux 中的串行端口上检测缓冲区溢出

转载 作者:太空狗 更新时间:2023-10-29 11:16:39 24 4
gpt4 key购买 nike

我有一个大问题。目前我正在通过以下 Hook 访问串口:

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 但它似乎没有列出超限(见下面的输出)

1: uart:16550A port:000002F8 irq:3 tx:70774 rx:862484 fe:44443 pe:270023 brk:30301 RTS|CTS|DTR

最佳答案

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

/*
* 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];
};

不过,我不知道是否每个驱动程序都能检测到所有情况。

关于linux - 如何使用 C++ 在 Linux 中的串行端口上检测缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3155213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com