Fflush () parancs mit csinál?
ajajajjj...
A puffer fogalmával tisztában vagy?
Amikor megnyitsz egy fájl (mondjuk írásra), akkor az op.rendszer létrehoz neki egy puffert (buffer) a memóriába, és oda emeli be azt a részét, amire szükség van. (Alap esetben az elejét, vagy amennyi belefér. Aztán mindig azt a rését, amire szükség van. Ez egy op.rendszer szolgáltatás.) Amikor a program ír a fájlba, akkor az valójában a memóriabeli pufferbe kerül, tehát nem rögtön a lemezre/háttértárra, mert az lassú lenne és nagyon nem hatékony. Tehát elképzelhető, hogy a program teljes futása alatt a kiírt adat nem is kerül lemezre, mert az op.rendszer vár, hogy hátha még írsz bele valamit, és majd egyszerre írja ki a lemezre. Ezek a változások csak a pufferben vannak meg, tehát a RAM-ban.
Na most az fflush() függvénnyel kikényszerítheted, hogy a változások valóban kerüljenek lemezre. Ezt jelenti, hogy kiüríti a fájl kimeneti pufferét.
Köszönöm szépen, így már értem. Még két kérdésem lenne. Ez alapján tehát ha van egy kódom, ami 3 óra alatt fut le és az első óra után szeretnék a hátértárolóra adatokat tenni és ki is adom erre az fprintf utasítást, akkor a fájl lehet hogy csak a 3. óra után jelenik meg, miután lefutott az egész? Ha meg úgy írom, hogy fprintf, utána fflush, akkor meg az első óra után megjelenik, ugye?
Másik kérdés, hogy sokszor az stdout argumentummal látom a parancsot, ez valami speciális dolog vagy csak szimplán a fájl neve ez?
1. Azért órákig nem tart a dolog. Nem tudom, hogy mi alapján dönti el az op.rendszer, hogy mikor írja ki, de akár már pár másodperc I/O inaktivitás után is kiírhatja lemezre. Ha folyamatosan írsz bele, akkor lehet, hogy többet vár, amíg úgy nem dönt, hogy na most már megéri elkezdeni egy lemez írási műveletet. Ez függ pl. a puffer méretétől is.
2. stdout = standard output, ami alapesetben a konzol képernyőt jelenti. Viszont az stdout is pufferelve van, tehát pl. akkor kerül kiírásra, amikor újsor karaktert írsz ki. (Nem csak akkor, de a lényeg, hogy nem azonnal.) Ez néha fura jelenségeket okozhat. Amikor az stdout "fájlra" hívsz egy fflush()-t, akkor rögtön kiíródik, tehát a puffere egyből megy a képernyőre.
* "tehát pl. akkor kerül kiírásra"
Itt arra gondolok, hogy mondjuk printf-fel kiírsz valamit, akkor az első körben a pufferbe íródik, aztán valamikor megjelenik a képernyőn.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!