anoniem Geplaatst: 12 augustus 2002 Delen Geplaatst: 12 augustus 2002 Kan iemand mij vertellen hoe io-buffering (files, sockets, etc) nou precies in zijn werk gaat, en wat het nu precies allemaal voor nu heeft? Of misschien weet iemand een beetje overzichtelijke site waar dit wordt uitgelegd? Bedankt, Barry Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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. Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 Het leuke is dat door sockets ook een aaneengesloten zooi bytes zijn. Sockets krijgen zelfs een fd, waardoor programmeren hiermee bijna hetzelfde is als voor file I/O. Dit zijn de zogeheten BSD-sockets, die M$ gejat heeft en de stack daarvan geimplementeerd heeft in Windows. Laag he? Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 Dank je daar was ik nu juist mee bezig, schot in de roos :lol: Wat jij laat zien is low-level, en dat wil ik nu juist gebruiken. Maar ik heb gehoord dat dit niet gebufferd wordt ofzo... iemand gaf me een tip om iostream calls te gebruiken... Is dit waar/handig/etc? Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 Please :cry: ??? Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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. Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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 Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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 ) Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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: Quote Link naar reactie
anoniem Geplaatst: 13 augustus 2002 Auteur Delen Geplaatst: 13 augustus 2002 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 Quote Link naar reactie
anoniem Geplaatst: 14 augustus 2002 Auteur Delen Geplaatst: 14 augustus 2002 Goed ik begin het een beetje te vatten: output io: schrijf aanvraag->userspace-buffer->buffer-vol->kernel-aanroep maar hoe werkt read-buffering dan? mits dat bestaat :-? Help! Barry (nu ouwe rot ;) ) Quote Link naar reactie
anoniem Geplaatst: 14 augustus 2002 Auteur Delen Geplaatst: 14 augustus 2002 Misschien heb je hier wat aan: http://www.advancedlinuxprogramming.com/advanced-linux-programming.pdf Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen