c - 有没有办法查询串口可用的数据量?

标签 c linux arduino serial-port usb

我刚开始研究串行数据采集,想知道是否有一种方法可以检查给定端口上是否有数据可用,如果有的话有多少?

更具体一点:如果有人曾经研究过 Arduino 上的编程,那么可以通过调用(从 Arduino API)轻松检查是否可以从 USB 串行接口(interface)读取数据:

if(Serial.available() > 0) { ... }

这样一来,就可以避免可能阻塞的 read() 调用,并在必要或需要时简单地读取数据。

但是考虑到相反的情况:“程序正在检查从 Arduino 发送的串行”,到目前为止,我所看到的在 C 中实现类似功能的唯一方法是通过引导 read() 的行为将 termios 属性 VMINVTIME 设置为特定值。但这并不是我真正想要的……我不想要一个非阻塞的 read()-调用或一个只在数据可用时才阻塞的 read()-调用。我想知道如果有数据要开始读取,甚至在尝试读取之前,如果是这样,可以(当前)从串行读取多少数据。

最佳答案

使用 FIONREAD读写控制。

int nread;
ioctl(Serial, FIONREAD, &nread);
if (nread > 0) {
    ...
}

关于c - 有没有办法查询串口可用的数据量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40141047/

相关文章:

c++ - 如何使用 C/C++ 通过 system() 系统调用以外的其他方法获取 Linux 中的文件功能?

linux -/etc/logrotate.d/中的两个文件试图管理同一个日志文件

c - 中断linux命令重定向会丢失数据吗?

c - 使用delay()时Arduino Socket.io显示已断开连接

php - 通过以太网安全地将数据从 Arduino 发送到 MySQL 数据库

Arduino LED 闪烁 -> 需要一些澄清和解释

c++ - C++中vtable查找的性能影响

c - 我们为什么以及如何重定向调试语句?

c++ - imread : QNativeImage: Unable to attach to shared memory segment 的 C 包装器中的 OpenCv 错误

linux - 在 Ubuntu 14.04 LTS 上为 Windows 32 位编译 VLC 2.1