For file errors, an error message generating function can check because of the global variable errno (#include <errno.h>). I use something like this:
Code:
void check_cause(void) {
printf("Cause: ");
switch (errno) {
case ENOENT:
printf("No such file or directory.\n");
break;
case EACCES:
printf("Permission denied.\n");
break;
case EINVAL:
printf("Invalid argument.\n");
break;
case EMFILE:
printf("Too many open files. Now at %d\n", num_distribute);
break;
default:
printf("Error Code %d\n", errno);
break;
}
}