Linux 串行端口读取 - 我可以更改输入缓冲区的大小吗?



我正在C++的Ubuntu Linux上编写一个应用程序,以从串行端口读取数据。它通过我的代码调用select()然后ioctl(fd,FIONREAD,&bytes_avail)找出有多少字节可用,然后最终使用 read() 获取数据。

我的问题是:每次select返回数据时,可用字节数都报告为 8。我猜这是在某处设置的缓冲区大小,并且当此缓冲区已满时,选择会向用户返回通知。

作为开发人员,我是 Linux 的新手(但对C++并不陌生),我试图研究(但没有成功)是否可以更改此缓冲区的大小,或者我的假设是否为真。在我的应用程序中,计时至关重要,每当读取缓冲区上有新字节时,都需要提醒我。这可能吗,而不深入研究内核代码?

您希望

使用串行 IOCTL TIOCSSERIAL,它允许更改接收缓冲区深度和发送缓冲区深度(以及其他内容)。 最大值取决于您的硬件,但如果 16550A 在起作用,则最大缓冲区深度为 14。

您可以在此处找到执行与要执行的操作类似的代码

原始链接变坏了:http://www.groupsrv.com/linux/about57282.html新的将不得不做,直到我写另一个或找到一个更好的例子。

您可以尝试使用 termios 结构的c_cc成员的 VMIN 和 VTIME 值。这里有一些信息,特别是在第 3.2 节中。

最新更新