C Language
Felhantering
Sök…
Syntax
- #include <errno.h>
- int errno; / * implementering definierad * /
- #include <string.h>
- char * strerror (int errnum);
- #include <stdio.h>
- void perror (const char * s);
Anmärkningar
Tänk på att errno
inte nödvändigtvis är en variabel utan att syntaxen bara är en indikation på hur det kan förklaras. På många moderna system med errno
är det ett makro som löser ett objekt som är lokalt för den aktuella tråden.
Felkod
När en standardbiblioteksfunktion misslyckas ställer den ofta in felnummer till rätt felkod. C-standarden kräver att minst 3 värden för errno ställs in:
Värde | Menande |
---|---|
EDOM | Domänfel |
ERANGE | Områdesfel |
EILSEQ | Olaglig teckenföljd med flera byte |
strerror
Om perror
är tillräckligt flexibel kan du få en användarläsbar felbeskrivning genom att ringa strerror
från <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 du vill skriva ut ett användarläsbart felmeddelande till stderr
, ring perror
från <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;
}
Detta kommer att skriva ut ett felmeddelande om det aktuella värdet på errno
.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow