【发布时间】:2012-11-01 16:08:39
【问题描述】:
您可以使用 ioctl 确定在 linux 下可以从串行端口读取多少数据。是否可以确定串行端口在写入时剩余多少缓冲区空间?实际上,我想将一个数据块写入串行端口,只有当它可以一次性全部卸载时才成功,或者如果必须被分块则失败。对端口的写入和读取是非阻塞的。我不希望这是 UARTs 缓冲区,而是 UARTs 缓冲区之前的内核内存缓冲区(我猜)。
【问题讨论】:
-
我怀疑它归结为硬件 tx/rx FIFO 大小,它是由内核从你那里抽象出来的......但内核是否只是将它保存在内部当对硬件来说太多时缓冲?我不知道。
-
这是我所期望的,所以内核内部缓冲区必须有一些上限。我期望能够检索的界限。
-
可能值得重新评估问题定义并考虑替代设计选项。也许异步 IO 方案会更好。或
openw/O_NONBLOCK,寻找EAGAIN。 -
实际上我正在尝试复制 send() 为套接字提供的功能,即要么全部执行,要么不执行。我将物理传输从应用程序的其余部分抽象出来。整个系统已经是非阻塞的了,所以我知道写不会阻塞,只是不知道会不会把我要的数据全部卸载到内核空间。
-
好的,试试
O_NONBLOCK。
标签: c linux serial-port buffer ioctl