Mac OSX:如何清除串行端口I/O缓冲区

Mac OSX:如何清除串行端口I/O缓冲区,c,macos,io,serial-port,flush,C,Macos,Io,Serial Port,Flush,我正在用C编写一个应用程序,它使用串口与蓝牙设备进行通信。我发现我可以关闭com端口,关闭蓝牙设备的电源,然后重新打开该端口,以查找以前连接的读取缓冲区中的过时数据。我需要刷新I/O缓冲区。解决办法似乎是使用 tcflush(fd, TCIOFLUSH) 根据OSX的tcflush手册页,它应该 刷新已接收但未读取的数据和已写入但未传输的数据 然而,这似乎是无效的 根据Unix上的解决方案是使用 ioctl(fd, TCFLUSH, 2) 但是,TCFLUSH在Mac上没有定义,我也不确定等

我正在用C编写一个应用程序,它使用串口与蓝牙设备进行通信。我发现我可以关闭com端口,关闭蓝牙设备的电源,然后重新打开该端口,以查找以前连接的读取缓冲区中的过时数据。我需要刷新I/O缓冲区。解决办法似乎是使用

tcflush(fd, TCIOFLUSH)
根据OSX的tcflush手册页,它应该

刷新已接收但未读取的数据和已写入但未传输的数据

然而,这似乎是无效的

根据Unix上的解决方案是使用

ioctl(fd, TCFLUSH, 2)

但是,
TCFLUSH
在Mac上没有定义,我也不确定等价物是什么。

读取和丢弃剩余的数据是否有效?@EugeneSh。可能,但我如何区分应该丢弃的旧数据和不应该丢弃的新数据?当然,一定有办法打开端口并立即刷新i/o缓冲区。关闭时刷新也可能有帮助。你确定旧数据实际上是由计算机而不是蓝牙设备缓冲的吗?@Daskwuff是的,我确定。我有额外的诊断功能,可以连接到蓝牙设备以查看它发送的内容。