Portál AbcLinuxu, 7. května 2025 05:40

Dotaz: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?

10.7.2023 18:13 gsnak | skóre: 22 | blog: gsnak
Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Přečteno: 357×
Odpovědět | Admin
Mam tento program:
#include<stdio.h>

void main() {
    fprintf(stdout, "a\n");
    fprintf(stderr, "b\n");
    fprintf(stdout, "c\n");
    fprintf(stderr, "d\n");
}
Ked ho spustim vidim vystup:
a
b
c
d
Chcem to presmerovat do suboru "log". Skusil som nasledovne:
$ ./a.out > log; clear; cat log
a
c

$ ./a.out 2>&1 > log; clear; cat log
a
c

$ ./a.out > log 2>&1; clear; cat log
b
d
a
c
(nespravne poradie)
Jak dosiahnut aby to co vidim na obrazovke bolo aj v subore?
Čo Rys, to vrah!

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Andrej)
10.7.2023 18:50 X
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co cekas? Ze za tebe bash bude mixovat stdout a stderr podle libosti? To asi tezko. Oprav si to laskave v kodu.
10.7.2023 18:53 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je třeba vypnout bufferování stdout.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10.7.2023 19:13 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ptal bych se spíš proč než jak. Logování mívá přesné timestampy z dobrých důvodů.

Jsou případy a situace, kdy žádné chronologické pořadí neexistuje.

11.7.2023 08:15 gsnak | skóre: 22 | blog: gsnak
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
> proč

Ked nie je obsah suboru chronologicky nedava jeho vystup zmysel
Čo Rys, to vrah!
11.7.2023 19:09 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?

Pak by to měl být jeden soubor a nikoliv dva oddělené soubory.

Všechno se dá psát dvojmo, pokud je to nutné, jednou odděleně a jednou do společného souboru.

Řešení 1× (gsnak (tazatel))
10.7.2023 19:47 PetebLazar | skóre: 34 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co to místo do souboru přesměrovat do tee, pak by snad zobrazení odpovídalo obsahu výslednému souboru?
11.7.2023 08:14 gsnak | skóre: 22 | blog: gsnak
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
$ ./a.out | tee z
b
d
a
c
$ cat z
a
c

$ ./a.out 2>&1 | tee z; echo aaa; cat z
a
b
c
d
aaa
a
b
c
d
funguje
Čo Rys, to vrah!
11.7.2023 15:51 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Možno tebe, ale mne nie. Samo o sebe poradie negarantuje výstup.
$ ./a 2>&1 | tee z; echo aaa; cat z
b
d
a
c
aaa
b
d
a
c
debian.plus@protonmail.com
11.7.2023 12:38 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Ako presmerovat stdout aj stderr do suboru v chronologickom poradi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
#include <stdio.h>

int main() {
    setbuf(stdout, NULL);
    fprintf(stdout, "a\n");
    fprintf(stderr, "b\n");
    fprintf(stdout, "c\n");
    fprintf(stderr, "d\n");
}
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

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.