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 .