如何知道哪些程序支持流式 I/O

utl*_*amn 1 linux io files

据我了解,支持流 I/O 的程序可以处理超过内存大小的文件。这样对吗?

有没有办法知道哪些程序支持流 I/O?

Cel*_*ada 6

如果程序支持流 I/O,它可以处理超过内存大小的文件,这是正确的

通常是的,但不一定。想象一个类似uniq但更复杂的程序,它计算其输入中每个唯一行的出现次数。与uniq它不同的是,它输出迄今为止看到的出现次数的运行总数。因此,它算作流式传输,因为它在接收输入时会逐渐产生输出。但是如果输入的每一行都是唯一的或接近它,它必须记住数据结构中的每一行来维护运行计数,并且它实际上无法处理大于内存的文件。

还有一种方法可以知道哪些程序支持流 I/O?

除非它被记录在案或除非您可以自己验证,否则不会,因为这取决于程序的作用。

不过,您可以做一些接近的事情:您可以测试程序是否需要可查找的输入文件。一些程序接受管道或常规文件(或套接字或其他东西)作为输入。其他人只能接受一个普通文件。如果程序坚持使用常规的、可查找的文件,那么它很可能不进行任何类型的流式传输。如果它允许管道作为输入,那么它很有可能这样做。但也有例外。例如,sort允许管道作为其输入,但它不进行流式处理:它仅在输入结束后输出任何内容。