C Language
Obsługa błędów
Szukaj…
Składnia
- #include <errno.h>
- int errno; / * zdefiniowano implementację * /
- #include <string.h>
- char * strerror (int errnum);
- #include <stdio.h>
- void perror (const char * s);
Uwagi
Pamiętaj, że errno
niekoniecznie jest zmienną, ale składnia jest jedynie wskazówką, jak można ją zadeklarować. W wielu nowoczesnych systemach z interfejsami wątków errno
to niektóre makro, które rozwiązuje obiekt lokalny dla bieżącego wątku.
errno
Gdy standardowa funkcja biblioteki zawiedzie, często ustawia errno na odpowiedni kod błędu. Norma C wymaga ustawienia co najmniej 3 wartości dla errno:
Wartość | Znaczenie |
---|---|
EDOM | Błąd domeny |
ZMIEŃ | Błąd zakresu |
EILSEQ | Nielegalna, wielobajtowa sekwencja znaków |
strerror
Jeśli perror
nie jest wystarczająco elastyczny, możesz uzyskać czytelny dla użytkownika opis błędu, wywołując strerror
z <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
Aby wydrukować czytelny komunikat o błędzie na stderr
, wywołaj perror
z <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;
}
Spowoduje to wydrukowanie komunikatu o błędzie dotyczącego bieżącej wartości errno
.
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow