Reading the man pages and some code did not really help me in
understanding the difference between - or better, when I should use - perror(\"...\") or fp
perror(const char *s): prints the string you give it followed by a string that describes the current value of errno.
stderr: it's an output stream used to pipe your own error messages to (defaults to the terminal).
Relevant:
char *strerror(int errnum): give it an error number, and it'll return the associated error string.