-
-
Notifications
You must be signed in to change notification settings - Fork 2
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); } }