Skip to content

POSIX Error Handling

marksvc edited this page Jun 17, 2021 · 3 revisions
 #include <string.h>
 // Do something that might set errno
 something();
 // Immediately preserve errno so we don't change it before examining it
 int errorNumber = errno;
 if (evidence of error) // eg something() may return non-zero or NULL on error
 {
   const int bufLength = 1024;
   char errorMessage[bufLength];
   char *actualErrorMessage = strerror_r(errorNumber, errorMessage, bufLength);
   // actualErrorMessage may or may not be pointing to errorMessage 
   // (so work with actualErrorMessage not errorMessage)
 
   // Deal with any errors that can be dealt with in a specific way, eg...
   if (ENOENT == errorNumber) {
     create_file_and_try_again();
     ...
   }
   else if (EROFS == errorNumber) {
     prompt_user_for_writable_path();
     ...
   }
   else // Handler for any errors that don't have special handling
   {
     fprintf(stderr,
       "libname: Warning: error doing thus-and-such: %s\n",
       actualErrorMessage);
   }
 }
Clone this wiki locally