System calls and Standard Library functions assign a zero value to the global variable errno to indicate success. In case of an error, they assign negative values to errno. On each invocation of a system call or library function, the environment overwrites the previous errno value. errno and its associated functions are declared in the standard header file . You can obtain a textual description of the last errno code by calling perror() which has the following prototype:
void perror(const char * user_msg);
perror() takes a string as an argument to which it appends a colon and a verbal description of the current errno value. The resulting string is printed on stderr (typically, the monitor). The common approach is to pass the filename of the program as an argument:
if (open("db_file.dat", O_RDONLY)<0)
perror (__FILE__); // pass current filename
The output may look as follows:
database.c: No such file or directory
Remember not to append a newline character to the string you pass an argument because perror() automatically appends a newline after the error description.