[linux] stderr pipe redirection, buffering
Pavol Kucerak
kucerak na ppa.sk
Čtvrtek Červen 7 15:13:01 CEST 2007
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
Další informace o konferenci linux