Windows 有一个功能PurgeComm
丢弃指定通信资源的输出或输入缓冲区中的所有字符。它还可以终止对资源的未决读或写操作。
并且有一个功能FlushFileBuffers
刷新指定文件的缓冲区并将所有缓冲数据写入文件。
这里一切都清楚PurgeComm了,清除缓冲区,但FlushFileBuffers强制将数据从缓冲区刷新到文件。
现在的Linux。int tcflush(int fd, int queue_selector);
man termios产生以下内容:
tcflush() 根据 queue_selector 的值,丢弃写入 fd 引用的对象但未传输的数据,或接收但未读取的数据:
TCIFLUSH - 刷新接收但未读取的数据。
TCOFLUSH - 刷新写入但未传输的数据。
TCIOFLUSH - 刷新接收但未读取的数据和写入但未传输的数据。
也就是函数的描述说是discards,flags的描述是 flush
那么她最终做了什么?从缓冲区中删除数据或将其刷新到文件中?
我在这里没有看到任何差异或矛盾,在描述中它说丢弃(discards),这意味着丢弃。当然,通过类比 S'shna
fflush()fromstdio,人们会认为数据将被写入某处,而不仅仅是缓冲区会被清除,但严格来说,没有上下文的术语“ flush ”本身绝不是这样说的,在在这种情况下,文档通常会写“ flushes to... ”之类的内容类似物
FlushFileBuffers传统上是一系列系统调用sync(),或者更确切地说是fsync()/fdatasync()。