[linux] Rura obojsmerna

Matus "fantomas" Uhlar uhlar na fantomas.sk
Pondělí Duben 28 09:14:17 CEST 2003


-> Aplikacia "rev" vyuziva tzv. stream (FILE*) funkcie z (g)libc. Cize pre
-> zapis a citanie pouziva cosi na styl fgets()/fputs(). V konecnom
-> dosledku tieto volania (g)libc zavolaju aj tak systemove read()/write(),
-> ale neodpustia si pri tom bufferovanie.
-> 
-> Ked vsak na prikazovom riadku spustis len
-> 
->     $ rev
-> 
-> tak nedostavas vystup kazdy 4096 bajtov. Preco? Lebo stream (FILE*)
-> volania z (g)libc zdetekuju, ze vstup alebo vystup je terminal a teda
-> bufferovanie nie je ziaduce. Filedescriptor, ktory vznikol cez pipe()
-> vsak evidentne do kategorie nebufferovanych vstupov resp. vystupov
-> nepatri.

obavam sa ze jedine co glibc testuje je, ci je stdout terminal. Ak ako,
nebufferuje, ak nie, bufferuje... 

existuje tu teda pomerne hlupy workaround k danej situacii a to pouzit
terminal :)

v pripade ze potrebujes nebufferovat vystup v aplikacii ktoru programujes,
mozno by si sa mal pohrat s funkciou setvbuf() resp setlinebuf()

-- 
Matus "fantomas" Uhlar, uhlar na fantomas.sk ; http://www.fantomas.sk/
Warning: I don't wish to receive spam to this address.
Varovanie: Nezelam si na tuto adresu dostavat akukolvek reklamnu postu.
I intend to live forever - so far so good. 



Další informace o konferenci linux