[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