如何确定linux串口上剩余的写入/输出缓冲区空间量?

时间:2012-11-01 16:08:39

标签: c linux serial-port buffer ioctl

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

3 个答案:

答案 0 :(得分:4)

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

阅读:

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;

此致 VA。

答案 1 :(得分:0)

串行端口是字符设备而不是块设备。它没有缓冲区。 字符设备(如串行端口,键盘,鼠标)只能写入和读取字符而不是单词。 对于exame,如果你听一个连续剧有人写“祝你有个愉快的一天”,如果你从他开始打字的时候不听,就不会看到整个短语。您只会看到在收听时键入的字符

答案 2 :(得分:0)

如果使用文件描述符访问串行端口,只要描述符准备好进行非阻塞写入,就可以使用select进行检查。我不知道什么时候这适用于串口。我将它用于TCP套接字,但它确实有用。