一些特殊的文件具有与单个写入相关的语义。(例如,FunctionFS (用户空间中的USB小工具)将单个USB传输中的一串USB数据包关联起来。两次写入将永远不会合并到单个USB数据包中。因此,第一次写入可以以短分组结束。)
因此,我不想使用asio::async_write,因为它允许对传递流的底层async_write_some进行零次或多次调用。但是,如果我直接使用stream.async_write_some,它允许并不是所有的数据都已经写入。
我需要的是保证流的async_write_some (of posix::basic_stream_descriptor)将序列中的所有缓冲区传递给向量化的写系统调用,并且只在系统调用决定这样做时才写入更少的数据。
我怎样才能做到这一点?我走错路了吗?
发布于 2022-10-25 13:36:16
您将在POSIX API方面使用什么?很可能它最终会得到与ASIO所连接的完全相同的底层API。因此,如果该API以您描述的方式运行,您可以期望ASIO以相同的方式运行(而不是导致部分完成)。
我很容易知道ASIO可能对缓冲区划分/操作有意见的唯一地方是另一种方式,因为出于性能原因,SSL缓冲区序列可以在写入之前进行组合。
如果我们知道这两个接口,您将尝试对比/影响分析,这将有所帮助。由于明显的原因,使用asio::posix::stream_descriptor或asio::serial_port会有区别。可能存在平台差异,但我假设平台是Linux,因为有了FunctionFS。
https://stackoverflow.com/questions/74194786
复制相似问题