Avatar billede stringbuffer Nybegynder
20. december 2001 - 23:24 Der er 3 kommentarer og
1 løsning

Redirecte output fra børneproces til fil

Dette er et linux/unix spørgsmål, så jeg gider ikke høre noget om Borland Builder, Visual C++ eller i det hele taget noget om andre compilere end gcc.

Jeg har et program, der starter et antal børneprocesser op med fork(). Alle processerne udskriver beskeder ved hjælp af printf og perror.

Alt ser ud til at virke når jeg starter programmet op uden redirection til fil:
programnavn 2>&1
- der bliver nu printet en masse linier i konsollen og alt er nydeligt.
Hvis jeg starter programmet i baggrunden med
programnavn 2>&1 &
virker det ligelesågodt, man kan se linierne rulle på skærmen.

Problemet opstår når jeg starter det op med redirection til en fil (logfil):
programnavn > etellerandet.log 2>&1

Der kommer til at stå INTET i logfilen!

Hvis jeg indsætter fflush(stdout); efter hver printf er der derimod ikke noget problem med at få skrevet til logfilen, heller ikke når der køres i baggrunden.

Såvidt jeg ved så SKAL det virke også UDEN fflush.

Hvad er årsagen til mit programs sære opførsel?
Avatar billede stringbuffer Nybegynder
21. december 2001 - 00:00 #1
Jeg tror jeg har svaret:

Der skal mindst en hel sides output for at der bliver udskrevet noget ved en redirection. Hvis programmet bliver standset inden mindst en af børneprocesserne får produceret denne mængde output, vil logfilen være tom.

Man kan (i hvert fald på RedHat Linux) afhjælpe det ved at bruge programmet unbuffer
unbuffer programnavn > etellerandet.log 2>&1

og så er man godt hjulpet...
Avatar billede stringbuffer Nybegynder
21. december 2001 - 00:03 #2
LOL
i manpage for unbuffer står der bl.a. følgende:

BUGS:
The man page is longer than the program

Og manpage for unbuffer er 12 linier lang
:-)))
Avatar billede jpk Nybegynder
21. december 2001 - 08:40 #3
Jeg tror ikke det SKAL virke uden flush!
Er der da nogle problemer med at anvende flush?
Avatar billede stringbuffer Nybegynder
21. december 2001 - 14:49 #4
Jeg mente at det SKAL virke fordi jeg et par gange før har kørt det uden fflush. Dengang var der dog en hel del flere beskeder og der kom flere sider ud hvert minut. Det er nok derfor, loggen ikke var tom.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester