[linux] stderr pipe redirection, buffering

Malosek Pavol, Ing. malo na palma.sk
Čtvrtek Červen 7 15:30:11 CEST 2007


zdravim
neviem sice odpovedat na vsetky otazky, ale na zachovanie poradia pomoze
fflush(stdout) resp. fflush(stderr) za fprintf-y.

malo

On Thu, 7 Jun 2007, Pavol Kucerak wrote:

> Pozdravujem vás mám otáazku.
> Mám takýto príklad s presmerovanim, na Cygwin na XP:
>
> #include <stdio.h>
> int main(int argc, char **argv)
> {
>     int n = 10;
>     int i =  0;
>     int ierr = 1;
>
>     for(i=1; i<= n; i++) {
>         fprintf(stdout, "Line output n.%2d to stdout\n",i);
>         if(i == (n/2)) {
>             fprintf(stderr, "Line output n.%2d to stderr\n",ierr);
>             ierr++;
>         }
>     }
>     return 0;
> }
>
> Skompilujme s gcc, nazvime ho testStd.
>
> pri spusteni:
>
> $ ./testStd.exe
> Line output n. 1 to stdout
> Line output n. 2 to stdout
> Line output n. 3 to stdout
> Line output n. 4 to stdout
> Line output n. 5 to stdout
> Line output n. 1 to stderr
> Line output n. 6 to stdout
> Line output n. 7 to stdout
> Line output n. 8 to stdout
> Line output n. 9 to stdout
> Line output n.10 to stdout
>
> pri spusteni s presmerovanim stderr do stdout a potom cez pipe:
>
> $ ./testStd.exe 2>&1 | cat -n
>      1  Line output n. 1 to stderr
>      2  Line output n. 1 to stdout
>      3  Line output n. 2 to stdout
>      4  Line output n. 3 to stdout
>      5  Line output n. 4 to stdout
>      6  Line output n. 5 to stdout
>      7  Line output n. 6 to stdout
>      8  Line output n. 7 to stdout
>      9  Line output n. 8 to stdout
>     10  Line output n. 9 to stdout
>     11  Line output n.10 to stdout
>
> Otázka. Prečo je to tak?  Urobí tak isto v linuxe?
> Záleží to od rôzneho bufrovania stdout a stderr?
> Dá sa urobiť tak, aby sa poradie výstupov nezmenilo? Pomocou setvbuf?
> Dá sa zistiť ako je nastavené bufrovanie? Ďakujem.
>
> P.Kučerák
>
> _______________________________________________
> https://lists.linux.sk/mailman/listinfo/linux
> Meta FAQ: http://www.sklug.sk/lists/linux/metafaq.html
>




Další informace o konferenci linux