Portál AbcLinuxu, 12. května 2025 09:13

Dotaz: flush buffer

2.5.2011 15:17 l0gik | skóre: 22
flush buffer
Přečteno: 202×
Odpovědět | Admin
Nevíte někdo, jak flushnout z bashe buffer pro stdout. Mam skript, kterek trvá dlouho a chci vypisovat jednotlivý tečky jak postupuje. Ale bufferování po cestě vypíše vždy až řádku teček, což je na nic...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.5.2011 18:54 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: flush buffer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Cachování si dělá každý program zvlášť. Pokud používá funkcí standardní knihovny, je možné do jisté míry jej ovlivnit nástrojem stdbuf.
2.5.2011 22:18 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: flush buffer
Díky za odpověd.

No mě jde o čistej shell (bash). Konrkétně aby příkaz echo -n '.' vyplivnul buffer. stdbuf na systému, kde to potřebuju nemám
3.5.2011 00:48 Sten
Rozbalit Rozbalit vše Re: flush buffer
bashovské echo by mělo před skončením flushnout buffer. Je možné, že u vás to z nějakého důvodu nedělá, ale přijde mi to poměrně nepravděpodobné. Můžete zkusit použít /bin/echo, které to dělá určitě.

Spíše si myslím, že ty operace trvají tak, že se ty tečky vypisují správně. Nemáte tam náhodou nějakou práci s diskem na ext3/ext4? Tam by to bylo normální chování, kdy se nejdříve zapisuje do bufferu, tak to běží rychle, a potom se buffer flushne, tak se to vypisování na chvíli zastaví.
3.5.2011 12:02 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: flush buffer
Je to tak, bash-4.2 na konci echa volá sh_chkwrite(), který dělá fflush(stdout).
3.5.2011 21:37 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: flush buffer
Je to bash 3.2.48 na freebsd 7.0 a evidentně flush nedělá (teda s parametrem -n, newline samozřejmě buffer vyplivne).

Mezi těma echo příkazama volám psql na různé sql skripty. V každém případě se na výstupu vždy objeví až nová řádka se všema tečkama. Ledaže by za to mohla puttyna, ale ta myslím nebufferuje vůbec.
3.5.2011 23:03 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: flush buffer
I GNU bash 3.2.48 volá fflush() bez ohledu na zakončení novým řádkem. Takže buď to mají ve FreeBSD změněné, nebo jejich implementace fflush() má svoji hlavu. (Nebo máte v terminálu zapnuté bufferování po řádcích.) Napište si krátký program, co volá fflush () po printf() bez nového řádku, a hned budete chytřejší.
4.5.2011 00:06 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: flush buffer
Tak bez fflush printf() bufferuje, fflush funguje.
3.5.2011 12:03 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: flush buffer
stdbuf je součástí coreutils.
3.5.2011 21:38 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: flush buffer
Je to na freebsd, tam to v instalaci není a nové věci tam instalovat nemůžu. Ale díky za pomoc.
3.5.2011 21:52 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: flush buffer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud to dává smysl s ohledem na pouziti scriptu, muzes zkusit stderr, ten by snad mel byt standardne po znacich.
4.5.2011 00:07 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: flush buffer
Jo, dík, stderr funguje. Ideální řešení to sice není, ale vzhledem k účelu skriptu postačí. Takže díky. Ale kdyby někdo věděl, jak to vyřešit čistě, tak bych byl rád...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.