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