C:
Skrive til standard feil
Hvordan:
I C brukes stderr
-strømmen til å skrive feilmeldinger. I motsetning til å skrive til standard utdata med printf
, kan skriving til stderr
gjøres ved hjelp av fprintf
eller fputs
. Slik kan du gjøre det:
#include <stdio.h>
int main() {
fprintf(stderr, "Dette er en feilmelding.\n");
fputs("Dette er en annen feilmelding.\n", stderr);
return 0;
}
Eksempel på utdata (til stderr):
Dette er en feilmelding.
Dette er en annen feilmelding.
Det er viktig å merke seg at selv om utdataen ser lik ut som stdout
i konsollen, når omdirigering brukes i terminalen, blir forskjellen klar:
$ ./ditt_program > output.txt
Denne kommandoen omdirigerer kun standard utdata til output.txt
, mens feilmeldingene vil fortsatt vises på skjermen.
Dypdykk
Forskjellen mellom stdout
og stderr
i Unix-baserte systemer går tilbake til de tidlige dagene av C og Unix. Denne separasjonen tillater en mer robust feilhåndtering og logging, da den gjør det mulig for programmerere å omdirigere feilmeldinger uavhengig av standard programutdata. Selv om stderr
er ubufret som standard for å sikre umiddelbar utdata av feilmeldinger, noe som hjelper i feilsøking av krasj og andre kritiske problemer, er stdout
vanligvis bufret, noe som betyr at utdataen kan bli forsinket til bufferen er tømt (f.eks. ved programavslutning eller manuell tømming).
I moderne applikasjoner er skriving til stderr
fortsatt relevant, spesielt for kommandolinjeverktøy og serverapplikasjoner der det er avgjørende å skille mellom vanlige loggmeldinger og feil. Imidlertid, for mer kompleks feilhåndtering, spesielt i GUI-applikasjoner eller der mer sofistikerte loggingsmekanismer er nødvendige, kan programmerere bruke dedikerte loggingbiblioteker som gir mer kontroll over meldingsformatering, destinasjoner (f.eks. filer, nettverk) og alvorlighetsnivåer (info, advarsel, feil osv.).
Selv om stderr
gir en grunnleggende mekanisme for feilrapportering i C, betyr utviklingen av programmeringspraksiser og tilgjengeligheten av avanserte loggingsrammer at det ofte er bare utgangspunktet for moderne feilhåndteringsstrategier.