Dado que fseek()
no funciona en las tuberías, ¿qué métodos existen para simular la búsqueda de avance? El enfoque ingenuo es usar fread()
y tirar los contenidos leídos en el búfer de memoria. Para grandes intentos de evitar enormes búferes, utilizaría el mismo búfer una y otra vez con la lectura final utilizando solo una parte del búfer.¿Cómo funciona en C portátil para buscar hacia adelante cuando se lee desde un conducto
¿Pero este es el único enfoque? ¿Hay alguna otra manera que evite el buffer y la posible lectura múltiple?
@hippietrail: si hay dudas sobre un búfer y varias llamadas 'leídas()' para omitir los datos, quizás sea mejor no usar un tubo en absoluto. Haga que la fuente escriba en un archivo de disco, luego el extremo del sumidero de la tubería puede usar llamadas familiares 'lseek()'. – wallyk
Por supuesto, pero a veces la salida producida dinámicamente tiene un formato conocido. – hippietrail
@wallyk: Algunas de las razones por las que utilicé las canalizaciones en el pasado incluyen el procesamiento de XML a partir de enormes archivos comprimidos y el procesamiento XML sobre la marcha a medida que llega a través de Internet. A veces lo que está buscando solo requiere una parte de la información completa, a veces no tiene espacio en el disco para tener todos esos archivos sin comprimir. – hippietrail