由于fseek()在管道上不起作用,因此模拟向前寻找的方法有哪些?幼稚的方法是使用fread()并且将读入内存缓冲区的内容丢弃。为了避免巨大的寻求而不必使用巨大的缓冲区,您可以一遍又一遍地使用相同的缓冲区,最后只使用缓冲区的一部分进行读取。 但这是唯一的方法吗?是否还有其他方式可以避免缓冲区和潜在的多次读取?
在管道上进行寻求操作并没有意义,因为输入是动态产生的(而不是存储在磁盘上)。内核系统调用lseek对于管道没有实现。 此外,请记住,管道本质上是一个大小有限且固定的生产者-消费者缓冲区。当它满了时,生产者被暂停,直到消费者读取最早的数据。
read()
调用跳过数据存在疑虑,也许最好根本不使用管道。让源将数据写入磁盘文件,然后管道的接收端可以使用lseek()
系列调用。 - wallyk