Liviu Daia wrote:
E fascinant ce povestesti tu, dar fara nici o legatura cu
realitatea. Fisierele in sensul stdio(3) au trei moduri de buffering:
(1) unbuffered
(2) line buffered
(3) fully buffered
se stie, pt mine buffered e cam ac chestie. din cate stiu unu face flush
la new line si fflush, celalat doar la fflush.
redirectarea ta de fisier va merge daca scrii 1> in loc de > (fortand
astfel buffering).
Nu e nici o diferenta intre ">file" si "1>file". Vezi "man 1 bash".
aici te contrazic. try it yourself. nu stiu de ce, dar chiar multe
chestii se comporta diferit la 1> si , chiar daca ambele teoretic fac
acelasi lucru, redirecteaza stdout. da stiu ce scrie in man, dar din
experienta pot sa-ti spun ca se comporta diferit.
De fapt e apelat _exit(3), nu exit(3). Dar, adevarat, si _exit(3)
goleste intai buffer-ele fisierelor.
ok. nu sunt sub nici o forma programator, asa ca faze cu _ le cam uit.
mai poti sa folosesti si programe care stiu de unbuffered stream pe
stdin, cum ar fi tcpdump | grep * > lola. e lame, useless use of grep,
da merge.
Vezi mai sus. Buffer-e de 8 KB pentru tcpdump si grep, plus
buffer-ul pipe-ului.
care buffer al pipeului are alt rol. sa, stiu ca si ala are 4k.
Tee face 2 lucruri, citeste buffered de pe stdin si scoate unbuffered
pe stdout,
De unde ai dedus asta?
default stdin e buffered, si parca in mai multe locuri am gasit referiri
la faptul ca la tee output e unbuffered. unele chestii chiar se bazeaza
pe asta.
Pipe-urile au un buffer de 4 KB sub toate sistemele pe care le-am
vazut pana acum. Rolul buffer-ului acolo este insa altul: daca
buffer-ul se umple, procesul care vrea sa scrie intra in blocking pana
ce procesul care citeste ii face loc.
asta stiam si eu, adica tre sa se cam humm, unu din procese sa se miste
greu rau, adica cel care citeste pt ca pipele sa se blocheze. Care in
chestii uzuale pe masini contemporane care ruteaza 9 pk pe secunda nu
stiu cat de des se intampla.
Cerere de iluminare.
Ok, atunci pun si eu o intrebare. Inteleg ca faptul ca outputu se scoate
in chunks de 4096 de bytes (daca nu scrii 1> in loc de > :P) se
datoreaza unui pipe ceva.
Fara nici o gluma, chiar ma intereseaza, cum si de ce ? si de ce se
intampla faza cu > vs 1> ?. (si eu am ramas siderat cand am vazut prima
data. Si la diverse chestii care folosesc tee tot asa tre sa fac ca sa
"mearga", si culmea, merge). si cealalta intrebare humm, de ce tcpdump
| grep merge coerent si tcpdump| less de exemplu merge tot in chunks.
Sunt sigur ca exista o explicatie. Probabil tu o stii, si as fi
recunscator sa ma lamuresti si pe mine.
De asemenea sunt curios care e diferenta dinte exit si _exit la nivel
ceva mai mult decat _exit face quick termination procedures, in timp ce
exit le face complete. in rest descrierile sunt identice. de asta pt
mine in general exit, _exit sunt acelasi lucru. In principiu ce e ala
"quick" ? Macar mai invat si io ceva, cat ma dau pe liste.
Dragos
_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug