Hallo,
da es darum geht die letzten n Zeilen auszugeben, sollte man von hinten anfangen (schon aus dem Grund um Rechenzeit und Dateizugriffe zu sparen; es gibt ja keinen Grund 5 Millionen Zeilen sequentiell zu lesen, um dann nur die letzten beiden auszugeben). Ich würde das wie folgt machen:
Dateigrösse ermitteln
Von hinten anfangen zu lesen (mittels lseek den Lesepointer entsprechend setzen)
Solange bis ein Newline (Zeilentrenner) gefunden wird,
Zeile ausgeben
Das ganze wiederholen, bis entweder die passende Anzahl an Zeilen ausgegebn wurde oder man am Anfag der Datei ist
Optimieren kann man das natürlich auch noch, in dem beispielsweise ein Puffer verwendet wird, in den Teile der Datei eingelesen werden (ebenfalls von hinten, beispielsweise immer in 512 Byte Schritten). Man muss sich dann aber über das Puffermanagement und überlappende Zeilen gedanken machen.
Nic