在Linux中丢弃来自管道或套接字的数据的最佳方法?

gct*_*gct 4 c linux linux-kernel

我遇到了一种情况,我可能想“跳过”管道或套接字中的数据进行处理。我当然可以将数据读入缓冲区并丢弃它,但是有更有效的方法吗?也许像 sendfile 这样的东西可以与不可映射的源一起使用?

tad*_*man 5

你需要read数据。你用它做什么取决于你,所以你可以跳过某些部分,或者其他什么。

如果不读取它,数据就会停留在读取缓冲区中。将其从缓冲区中取出的推荐方法是读取它。

话虽如此,如果您读到的内容表明所有后续数据都将毫无用处,您可以直接关闭连接并完成它。

我不确定你所说的“高效”是什么意思,因为从缓冲区读取可能不是代码中的性能瓶颈。

  • @SeanMcAllister,听起来您正在尝试预测性能影响。这可能是一个有趣的练习,但众所周知,要准确地做到这一点是非常困难的。在这种情况下,这实际上并不重要,因为对于不可查找的文件(例如套接字和管道),您别无选择,只能读取数据以便在流中前进,并且没有用户空间接口来读取数据而无需放置它在某个地方。 (2认同)