Pipe of Fifo met 'buffer' van aantal kb's

Pagina: 1
Acties:

  • DeuTeRiuM
  • Registratie: December 1999
  • Laatst online: 13-02-2025

DeuTeRiuM

http://koelkast.net/

Topicstarter
Hola,

ben een beetje aan het diehard prutsen (linux), maar nu heb ik iets nodig wat als buffer kan dienen.
Ik dacht aan iets als een pipe waarin een x-aantal kb's past. Of een fifo-file waarin een aantal kb's past.

Dus een proggie stuurt 4kb text naar /tmp/myfifo dan leest een ander proggie het weer uit, maar de /tmp/myfifo blijft met 4kb gevuld.. Is dit mogelijk? Kun je zo'n pipe niet gewoon wat langer maken :P

[04:53:17][roel@roel:~]$ sleep
bash: sleep: command not found


  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 30-03 20:37
wa wil je precies gaan doen dan? bufferen doet de kernel zelf wel, als je iets hebt als
ls | more
ofzo, dan wordt er ook al gebufferd, maar dat hoef je dan zelf niet meer te doen. Dat is het handige van de pipe!

Verwijderd

tenzij je de data uit de buffer realtime wilt kunnen uitlezen. Een pipe (als in | ) slaat alle uitvoer van het eerste commando op en stuurt deze naar de invoer van het tweede. Dit gebeurt dus sequentieel (dwz het tweede commando wordt pas gestart nadat het eerste is beeindigd)

  • DeuTeRiuM
  • Registratie: December 1999
  • Laatst online: 13-02-2025

DeuTeRiuM

http://koelkast.net/

Topicstarter
nee, een pipe | heeft een buffer van 4096 bytes (4kb), en ik wil dat dat bijv 100kb wordt..
maakt me niet uit hoe, fifo's, pipes of op een of andere manier geheugen daarvoor abusen.. als 't maar werkt met een paar simpele commando's :P Het idee is dus dat ik nite 27432432 regels code moet kloppen :)

[04:53:17][roel@roel:~]$ sleep
bash: sleep: command not found


  • bkor
  • Registratie: November 2000
  • Niet online
Mandrake heeft als contrib het programma 'buffer' dat precies doet wat je wilt, voorbeeld:

commando1 | buffer | commando2

Quote van rpm -qi buffer:
This is a program designed to speed up writing tapes on remote tape
drives. After startup it splits itself into two processes. The first
process reads (and reblocks) from stdin into a shared memory buffer.
The second writes from the shared memory buffer to stdout. Doing it this way
means that the writing side effectly sits in a tight write loop and
doesn't have to wait for input. Similarly for the input side. It is
this waiting that slows down other reblocking processes, like dd.

Verwijderd

Wat jij wilt zijn gewoon buffers dus. Die kun je dus gewoon maken in c ofzo. Of je pakt een hash in Perl (eventueel een hash gekoppeld aan een bestand).

#define max_buf 4096

Wat ik trouwens niet zo goed snap is de hele bedoeling. je wilt een /tmp/filename vullen met iets maar dat kan toch zowieso wel ? Pipes zijn alleen maar om informatie tussen programma's uit te wisselen op een simpele manier. De output van het ene programma kan dienen als invoer voor het andere. Wat maakt het nou uit hoe groot dan bijvoorbeeld zo'n buffertje is zolang de informatie maar overkomt. Nou ja goed echte buffers programmeer jezelf enzo. C ligt dan gewoon voor de hand. Je kunt trouwens ook bijvoorbeeld programma's schrijven die shared memory gebruiken. Dat is een andere manier van pipen zeg maar :)

Ow ik zit dit allemaal nog s door te lezen ik begrijp je nu beter :) Maak gewoon je eigen progje in C met een dikke buffer en doe dan wat hierboven staat "prog | eigen prog | ander prog" dan ben je eral. Of gebruik gewoon wat bkor zegt.

  • DeuTeRiuM
  • Registratie: December 1999
  • Laatst online: 13-02-2025

DeuTeRiuM

http://koelkast.net/

Topicstarter
bkor schreef op 31 augustus 2002 @ 23:18:
Mandrake heeft als contrib het programma 'buffer' dat precies doet wat je wilt, voorbeeld:

commando1 | buffer | commando2

Quote van rpm -qi buffer:

[...]
Hmm, zou je kunnen kijken waar dat proggie te downloaden is? Ik zie wel een hoop buffer proggies op freshmeat, maarja, mandrake zal wel een goed buffer proggie uitgezocht hebben. Of nee, ik kan het ook wel kijken.. Naja, als je het toevallig snel kan zien zou ik het graag willen weten, want ik moet nu met rpm find klooien enzo, gebruik (gelukkig) namelijk geen rpm distro. rpm -qi buffer doet het vrij latig dan zegmaar..

[04:53:17][roel@roel:~]$ sleep
bash: sleep: command not found


  • bkor
  • Registratie: November 2000
  • Niet online
Jammergenoeg staat er geen URL bij. Ik had gisteren wel even gekeken waar het te downloaden was en kon alleen http://gd.tuwien.ac.at/utils/archivers/buffer/ vinden (losse bestanden, geen tar.gz).

Ik heb de tar.bz2 +patch uit de .src.rpm gehaald:
http://www.xs4all.nl/~dgk/buffer-1.19.patch.bz2
http://www.xs4all.nl/~dgk/buffer-1.19.tar.bz2

  • DeuTeRiuM
  • Registratie: December 1999
  • Laatst online: 13-02-2025

DeuTeRiuM

http://koelkast.net/

Topicstarter
Denk dat ik een nieuwer (beter?) buffer proggie heb gevonden... Moet het nog wel ff compilen.
Thanks anyways, ik zal laten weten of het werkt :)

[04:53:17][roel@roel:~]$ sleep
bash: sleep: command not found


  • DeuTeRiuM
  • Registratie: December 1999
  • Laatst online: 13-02-2025

DeuTeRiuM

http://koelkast.net/

Topicstarter
wew! 't werkt!:)
't programma heet bfr, is te vinden op freshmeat..

[04:53:17][roel@roel:~]$ sleep
bash: sleep: command not found

Pagina: 1