hip*_*ail 9 c pipe fseek seek
既然fseek()不能在管道上运行什么方法来模拟前进?天真的方法是使用fread()并丢弃读入内存缓冲区的内容.为了避免巨大的缓冲区,你只需要使用缓冲区的一部分就可以反复使用相同的缓冲区.
fseek()
fread()
但这是唯一的方法吗?还有另一种方法可以避免缓冲区和潜在的多次读取吗?
Bla*_*iev 6
寻求在管道上没有意义,因为输入是动态生成的(不存储在磁盘上).该lseek内核的系统调用是不是管道实现.
lseek
还要记住,管道本质上是一个有限的固定大小的生产者 - 消费者缓冲区.当它变满时,生产者将被暂停,直到消费者读取最旧的数据.
R..*_*R.. 5
是的,这是唯一的方法。我会在1k-8k左右的地方使用缓冲区。较小的读取会占用系统调用开销,较大的则会从缓存中逐出有用的数据。
归档时间:
14 年,6 月 前
查看次数:
3243 次
最近记录:
11 年 前