20. december 2001 - 23:24Der 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.
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
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.
Synes godt om
Ny brugerNybegynder
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.