Fragen zu: setvbuf



  • Hi,

    mit setvbuf kann man einen stream einen buffer (und dessen) Größe zuteilen, und auch die Art des Buffers (ungepuffert, zeilen oder Blockpuffer).

    Nun zu meiner Frage, es gibt die Konstante BUFSIZ, was genau bedeutet diese in dem Zusammenhang. Ist es die maximale Puffergröße in Bytes?

    Was wäre, wenn man mit setvbuf einen Wert höher als diesen Puffer einstellt und wie verhält sich ein fread/fwrite mit einem größeren Puffer?
    Also, wenn man z.B.
    setvbuf(myFile, NULL, _IOFBF, 2BUFSIZ);
    fread(myFile, myIntBuffer, sizeof(int), 4
    BUFSIZ);

    oder sowas in der Art hat?

    Vielen Dank für ein paar Hinweise,
    Mat.



  • mit setvbuf(...) setzt du die grösse eines read-ahead buffers. das heisst auch wenn du mir fread(..) nur ein einziges byte einliest wird der buffer
    gefüllt und darauffolgende zugriffe auf das file lesen aus dem read-ahead buffers.
    wenn du mit fread() mehr daten liest als in den read-ahead buffer passen wird dieser halt mehrfach aufgefüllt.
    zb. bei einem ungebufferten file resultiert fread( myFile, myIntBuffer, 1, 4) in 4 zugriffen auf die Hardware.
    Ich hoffe das meine Erklärung ausreichend verständlich ausgefallen ist.
    K



  • Ja, danke.

    Also ist BUFSIZ die Größe, welche zu einer optimalen IO führen sollte.



  • ja wenn du BUFSIZE auf die grösse des files setzt wird das ganze file mit einem einzigen lesezugriff auf die hardware gelesen. ( so habe ich setvbuf() jedenfalls verstanden ).
    K


Anmelden zum Antworten