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