[linux] stderr pipe redirection, buffering

kucerak kucerak na ppa.sk
Čtvrtek Červen 7 16:41:54 CEST 2007


Vdaka za odpovede.
fflush ma nebaví volať.

Matus UHLAR - fantomas  wrote / napísal(a):
>>> Otázka. Prečo je to tak?
>>>       
>
> On 07.06.07 15:29, Andrej Hosna wrote:
>   
>> Bufferovanie je rozdielne pre stdout a stderr. Pre stderr sa myslim vypisuje 
>> pri najneskor pri /n. (man setbuf)
>>     
>
> ...a je to tak preto, aby bol stderr vypisovany co najskor, zatialco stdout,
> pokial nesmeruje na terminal, bude bufferovany, aby sa praca s nim co
> najviac zefektivnila. Volat system pre zapis do suboru po kazdom riadku nie
> je velmi efektivne, buffering sposobi, ze prikaz bude volany len raz za
> X bytov.
>
>   
To je dobre a rozumne.
>>> Dá sa urobiť tak, aby sa poradie výstupov nezmenilo? Pomocou setvbuf?
>>>       
>> Ano
>>     
>
> ano, ale naco?
>
>   
Niekedy potrebujem vidieť stdout aj stderr v rovnakom poradí, nemám ešte 
dobre
vymyslenú diagnostiku, tak by mi to pomohlo. Aj za cenu že to nebude 
také efektívne.
>>> Dá sa zistiť ako je nastavené bufrovanie?
>>>       
>> Ano, jednoducho z manualovej stranky.
>>     
>>  Normally all files are block buffered.  When the first I/O operation occurs 
>> on  a file, malloc(3) is called, and a buffer is obtained.  If a stream 
>> refers to a terminal (as std-out normally does) it is line buffered.  The 
>> standard error stream stderr  is  always  unbuffered  by default.
>>     
>
> man stdio, pripadne man setbuf mozno odpovedia viac...
>   

Tak tieto riadky sú dobré. Vďaka. Ale nenašiel som to v cygwine v man 
setvbuf ani v man setbuf.
Ani v MSDN MS Vis. Studio 2005. Ale cez google som potom našiel:
http://www.hmug.org/man/3/setvbuf.php
Ale myslel som niečo ako getbufinfo(FILE*). Asi by to mohlo byť v 
štruktúre FILE,
a keby som pozrel zdroják setvbuf, tak by som to zistil. Ale asi mi bude 
stačiť to čo
už viem.
Takže pre riešenie mojho probl. budem musieť nastaviť riadkové 
bufrovanie na stdout,
ktoré sa pri presmerovaní zmenilo na blokové. Vďaka.

P.K.





Další informace o konferenci linux