Ga naar inhoud

IO buffering


anoniem

Aanbevolen berichten

Hehe, Windows of Unix? Ik ben (uiteraard) Unix fan: Onder Unix is een file een aaneengesloten "block" van bytes. Als je een file opent / sluit / creeert / verwijdert moet hij allereerst herkent kunnen worden. Een file heeft dan een file-descriptor, welke door het systeem worden toegekend. Dan wil je iets met die file gaan doen. Unix-system calls voor file I/O hebben graag een buffer. Bijvoorbeeld een file lezen, eerst wil je weten welke bytes je moet hebben op een HD (welke file), deze open je en je krijgt een fd (file-descriptor) terug. Deze blok bytes lees je daarna in in en buffer en deze schrijf je weer weg, of je doet er nix mee. Op deze manier kun je elke individuele karakter benaderen. Stel je voor als je dat niet kon en je moest een text document van 1MB wijzigen? Een klein codevoobeeldje: [code:1:fb723517e8] #include <fcntl.h> #include <uninstd.h> main() { int fd; ssize_t nread; char buf[1024]; /*open de file voor lezen */ fd = open("data", O_RDONLY); /*lees de data in een buffer*/ nread = read(fd, buf, 1024); close(fd); } [/code:1:fb723517e8] Dit is uiteraard programmeren met alleen API-CALLS onder Unix. Ik heb dit maar als voobeeld genomen. Als je meer uitleg wilt over de calls (of dit was niet de bedoeling) reply dan ff.
Link naar reactie
Hoe bedoel je wordt niet gebufferd? Tip: Ik heb een heel goed boek hierover, het heet "Unix System Programming", door Keith Haviland. ISBN: 0-201-87758-9 Hierin staat alleen maar programmeren met Unix-API calls. Heel handig, ik heb er zelf een webserver(een hele lichte) mee geschreven :lol: Opbouw van het boek: 1. Basic concepts and terminology 2. The file 3. The file in context 4. Directories, file systems and special files 5. The process 6. signals and signal handling 7. IPC using pipes 8. Advanced IPC 9. The terminal 10. sockets 11. The standard I/O library 12. Miscelannous systam calls and library routines Oh ja IPC=Inter Process Communication. Je over alle onderwerpen hoe er voor te programmeren, lekker low-level, alleen met Unix system calls.
Link naar reactie
Hmmm, ik heb Het Linux Programming boek van Wrox-press. Das ook wel een goed boek, misschien moet ik het gewoon nog een keertje lezen :roll: Maar wat ik gewoon ff wilde weten: volgens iemand waarmee ik mee samenwerk aan een project, worden die low-level calls niet user-space gebufferd (vandaar ook de absentie van een zekere low-level flush). Dit schijnt kennelijk niet zo handig te zijn. Maar of dat nu ook echt waar is.... Ik dacht misschien weet jij dat wel ;) Bedankt, Barry
Link naar reactie
Om eerlijk te zijn, die zin zegt me helemaal niks :lol: Maar als je bekijkt, dat ook C library's gewoon een zooitje "wrapper-code" om de native API-calls heen is, zou je met API-calls alles kunnen + meer wat je ook met een hogere programmeertaal ook kunt. Het ligt er maar net aan hoeveel tijd je bereid bent erin te steken. Overigens waarom heb je zoiets nodig(lees: leg de zin uit :P )
Link naar reactie
Nou gewoon, low-level commands als read, write, open, close schrijven volgens die gene direct naar de kernel en niet zoals de tegen hangers (C: fopen, fwrite, fread, fclose, fflush C++ iostream en fstream classen) naar een userspace/soort buffer... maar ik weet niet of het nou wel waar is, en ook niet wat ie nu precies bedoelt :oops:
Link naar reactie
Oja, ik dingen als fwrite niet gebruiken in mijn lib want 1 classe neemt een fileio en een socketio classe voor zijn rekening, en op sockets werken high-level io-functies helemaal niet, het zit ongeveer zo: stream-classe (hier wordt read,write,select etc in gebruikt) ^ |------- fileclasse (open en close) |------- socketclasse (connect, accept, listen ed.) Hoooi, Barry
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...