Read - Zeilenvorschub...



  • Hallo,

    gibts es eine Moeglichkeit, den Positionszeiger beim Read in Zeile X (Bsp. Zeile3) zu setzen oder muss ich Character weise lesen und auf LF, '\n', etc. pp. pruefen?

    Vielen Dank 🙂

    Escapete



  • Wo ist das Beispiel???



  • Dein Dateisystem kennt das Konzept der Zeilen nicht. Du musst die Position anhand der Zeilenwechsel selbst ermitteln.

    @jox:
    Das Beispiel ist vermutlich "Zeile 3" 😃



  • hmn...wenn die zeile eine feste laenge hat, dann kann ich lseek verwenden...

    kein beispiel, abstraktes denken 😉



  • Warum nimmst Du nicht z.B. 3 mal fgets(), um die Zeile 3 zu erwischen, und interpretierst dann an Position in der erhaltenen Zeile/Buffer.

    Wenn Du allerdings zwingend mit den low-level Funktionen read(2) etc arbeiten musst, bist Du natürlich gekniffen. Evtl. hilft ein fdopen(), um auf gepufferte Eingabe umzuswitchen (dann aber kein fclose(), da das den Filedescriptor ebenfalls mit schließt, aber dafür gibt es auch eine Lösung)

    ... oder habe ich das Beispiel immer noch nicht begriffen???

    @LordJaxom: Danke 😉



  • jox schrieb:

    (dann aber kein fclose(), da das den Filedescriptor ebenfalls mit schließt, aber dafür gibt es auch eine Lösung)

    Dann aber besser dup, fdopen und fclose, da sonst die vom Stream allokierten Ressourcen (Buffer etc) liegenbleiben.



  • jox schrieb:

    ..., aber dafür gibt es auch eine Lösung

    Genau das ist die angesprochene "Lösung", aber lass uns doch erst einmal abwarten, was escapete überhaupt da so machen will. Wenn er das nur ein einziges Mal machen will und anschließend auf die Datei nicht noch einmal zugreifen will und sein Programm kein Dauerläufer ist, braucht er auch keinen großen Aufstand zu machen. Wenn das gar keine "normale" Datei ist, braucht er vielleicht irgendeine spezielle Lösung.

    ... und die Kombination dup(), fdopen() kann auf einigen nicht-Linux Systemen bei häufiger Nutzung auch zu Problemen führen (z.B. SUN/Solaris). Das ist zwar ein sehr spezielles Thema, aber auch dafür gibt es eine Lösung.


Anmelden zum Antworten