Da fseek()
bei Pipes nicht funktioniert, welche Methoden gibt es, um vorwärts zu suchen? Der naive Ansatz besteht darin, fread()
zu verwenden und die gelesenen Inhalte in den Speicherpuffer zu werfen. Bei großen Versuchen, große Puffer zu vermeiden, würden Sie den gleichen Puffer immer wieder mit dem letzten Lesen verwenden, indem Sie nur einen Teil des Puffers verwenden.
Aber ist das der einzige Ansatz? Gibt es einen anderen Weg, der den Puffer und die mögliche Mehrfachlesung vermeidet?
Das Suchen macht bei Pipes keinen Sinn, weil die Eingabe dynamisch erzeugt wird (nicht auf der Festplatte gespeichert). Der Kernel-Systemaufruf lseek
ist für Pipes nicht implementiert.
Bedenken Sie auch, dass eine Pipe im Wesentlichen ein Erzeuger-Verbraucher-Puffer einer begrenzten, festen Größe ist. Wenn es voll ist, wird der Erzeuger angehalten, bis der Verbraucher die ältesten Daten liest.