C Language
Обработка ошибок
Поиск…
Синтаксис
- #include <errno.h>
- int errno; / * определенная реализация * /
- #include <string.h>
- char * strerror (int errnum);
- #include <stdio.h>
- void perror (const char * s);
замечания
Имейте в виду, что errno
не обязательно является переменной, но синтаксис является лишь показателем того, как он мог быть объявлен. Во многих современных системах с интерфейсами потоков errno
представляет собой макрос, который разрешает объект, локальный для текущего потока.
ERRNO
Когда стандартная функция библиотеки выходит из строя, она часто устанавливает errno в соответствующий код ошибки. Для стандарта C требуется установить не менее 3 значений для errno:
Значение | Имея в виду |
---|---|
EDOM | Ошибка домена |
ERANGE | Ошибка диапазона |
EILSEQ | Нелегальная многобайтовая последовательность символов |
strerror
Если perror
недостаточно гибкий, вы можете получить пользовательское описание ошибки, вызвав strerror
из <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
Чтобы напечатать прочитанное пользователем сообщение об ошибке в stderr
, вызовите perror
из <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;
}
Это выведет сообщение об ошибке относительно текущего значения errno
.