fseek ohne Dateiöffnen

  • Ich steh grad voll aufm Schlauch und suche gerade wie bekloppt nach der C-Funktion, mit der man einen Dateizeiger setzen kann ohne die Datei zu öffnen. Mit fseek muss man die Datei öffnen. Im Quelltext von Klaus war sie auch irgendwo mal genutzt worden, weiß aber nicht mehr wo. Ich hab auch meine C-Referenzen grad nicht zur Hand.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Wie soll das gehen? Der Schreiblesezeiger gehört ja zum Handle der geöffneten Datei. Deshalb kann z.B. ein Prozess eine Datei schreiben (Schreibzeiger) und mehrere andere Prozesse sie lesen (mit unterschiedlichen Lesezeigern). Wenn die Datei geschlossen wird ist auch der Zeiger "futsch".
    Ich denke, Du meinst vermutlich etwas anderes und verwechselst das mit Dateizeigern. Kann das sein?

  • Okay, war in der Tat nen Fehler. Es fiel nicht das Dateiöffnen weg, sondern das ermitteln der Position mit ftell. Die Funktion hieß lseek. Die ermittelt die Position sofort ohne ftell nochmal anwenden zu müssen.


    Jetzt bin ich mir aber nicht sicher, was besser ist. fseek mit ftell oder lseek. Ich will im Prinzip nur feststellen, was der letzte Fileoffset einer Datei ist. Ginge das vielleicht auch eleganter? Eventuell über die Dateigröße?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Das ist die Dateigröße auf der Festplatte. Stimmt die auch mit der richtigen Größe überein? Es wäre fatal (weil segfaults vorprogrammiert), wenn diese Größe die Blockgröße der Datei ist. Die kann ja sehr schwanken.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Quote

    Original von methodus
    Okay, war in der Tat nen Fehler. Es fiel nicht das Dateiöffnen weg, sondern das ermitteln der Position mit ftell. Die Funktion hieß lseek. Die ermittelt die Position sofort ohne ftell nochmal anwenden zu müssen.


    Jetzt bin ich mir aber nicht sicher, was besser ist. fseek mit ftell oder lseek. Ich will im Prinzip nur feststellen, was der letzte Fileoffset einer Datei ist. Ginge das vielleicht auch eleganter? Eventuell über die Dateigröße?


    off_t fileSize = lseek(stream, 0, SEEK_END);


    setzt den Dateizeiger an das Ende und gibt den Offset zurück.


    ardi


    PS: fileSize == -1 --> ERROR

    :welle ASRock K10N78FullHD-hSLI R3.0, Atlon64 X2 4850e (45W), 2GB RAM,500GB SATA, SkyStar2+TT-S21600, yaVDR

    The post was edited 1 time, last by ardi ().