errno is part of a traditional error handling system.
Certain functions, when they fail, will set up errno to a certain value, different from zero.
Then you use perror() to print the "human readable" error message associated with errno's value, and you can add your own custom message too. http://www.cs.cf.ac.uk/Dave/C/node18.html#SECTION001810000000000000000
(2) What is the point in the else statement in the following function, if
either way an error message is spit out?
To be pedantic, the else branch should print to stderr instead of stdout, to say that it prints an error message. fprintf(stderr, "ERROR: %s\n", message);
Anyway, my post is just an educational supplement to Andy's. He answered your questions well.