C Language
Foutafhandeling
Zoeken…
Syntaxis
- # include <errno.h>
- int errno; / * implementatie gedefinieerd * /
- # include <string.h>
- char * strerror (int errnum);
- # include <stdio.h>
- void perror (const char * s);
Opmerkingen
Houd er rekening mee dat errno
niet noodzakelijkerwijs een variabele is, maar dat de syntaxis slechts een indicatie is hoe deze kan worden verklaard. Op veel moderne systemen met thread-interfaces is errno
een macro die wordt omgezet in een object dat lokaal is voor de huidige thread.
errno
Wanneer een standaardbibliotheekfunctie mislukt, wordt errno vaak ingesteld op de juiste foutcode. De C-norm vereist dat er minimaal 3 waarden worden ingesteld voor errno:
Waarde | Betekenis |
---|---|
EDOM | Domeinfout |
ERANGE | Bereikfout |
EILSEQ | Ongeldige reeks van meerdere bytes tekens |
strerror
Als perror
niet flexibel genoeg is, kunt u een door de gebruiker leesbare foutbeschrijving verkrijgen door strerror
aan te roepen van <string.h>
.
int main(int argc, char *argv[])
{
FILE *fout;
int last_error = 0;
if ((fout = fopen(argv[1], "w")) == NULL) {
last_error = errno;
/* reset errno and continue */
errno = 0;
}
/* do some processing and try opening the file differently, then */
if (last_error) {
fprintf(stderr, "fopen: Could not open %s for writing: %s",
argv[1], strerror(last_error));
fputs("Cross fingers and continue", stderr);
}
/* do some other processing */
return EXIT_SUCCESS;
}
perror
Om een door de gebruiker leesbaar foutbericht naar stderr
af te drukken, roept u perror
via <stdio.h>.
int main(int argc, char *argv[])
{
FILE *fout;
if ((fout = fopen(argv[1], "w")) == NULL) {
perror("fopen: Could not open file for writing");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Hiermee wordt een foutbericht afgedrukt met betrekking tot de huidige waarde van errno
.