Поиск…


Синтаксис

  • #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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow