4

您可以使用 ioctl 确定在 linux 下可以从串行端口读取多少数据。是否可以确定串行端口在写入时剩余多少缓冲区空间?实际上,我想将一个数据块写入串行端口,只有当它可以一次性全部卸载时才会成功,或者如果必须将其分块则失败。对端口的写入和读取是非阻塞的。我不希望这是 UARTs 缓冲区,而是 UARTs 缓冲区之前的内核内存缓冲区(我猜)。

4

3 回答 3

5

您可以确定写入/输出的数量。

供阅读:

ioctl(device_handler, TIOCINQ, &bytes);

对于写:

ioctl(device_handler, TIOCOUTQ, &bytes);

FIFO 缓冲区大小:

serial_struct serinfo;
memset(&serinfo, 0, sizeof(serinfo));
ioctl(device_handler, TIOCGSERIAL, &serinfo);
serinfo.xmit_fifo_size;

问候,弗吉尼亚州。

于 2014-10-03T10:28:54.660 回答
0

如果您使用文件描述符访问串行端口,则可以select用于检查描述符何时准备好进行非阻塞写入。我不知道这适用于串行端口。我将它用于 TCP 套接字并且它有效。

于 2012-12-02T22:23:56.700 回答
0

串口是字符设备而不是块设备。它没有缓冲区。字符设备(如串口、键盘、鼠标)只读写一个字符而不是一个单词。例如,如果你听某人写的连续剧“祝你有美好的一天”,如果你从他开始打字的时候就没有听,你就看不到整个短语。收听时您只会看到输入的字符

于 2012-11-02T18:50:42.980 回答