fprintf (3) stderr errno (3) strerror (3)
fprintf(stderr, "something wrong: %s\n", strerror(errno));
GNU libc ( Linux) %m :
fprintf(stderr, "something wrong: %m\n");
stderr (. stderr (3)); . syslog (3) .
\n, stderr ( ), fflush (3 )
, , fopen:
char* filename = somefilepath();
assert (filename != NULL);
FILE* f = fopen(filename, "r");
if (!f) {
int e = errno;
if (filename[0] == '/')
fprintf(stderr, "failed to open %s : %s\n", filename, strerror(e));
else {
char dirbuf[128];
memset (dirbuf, 0, sizeof(dirbuf));
if (getcwd(dirbuf, sizeof(dirbuf)-1))
fprintf(stderr, "failed to open %s in %s : %s\n",
filename, dirbuf, sterror(e));
else
fprintf(stderr, "failed to open %s here : %s\n",
filename, sterror(e));
};
exit(EXIT_FAILURE);
}
, errno ( e, , getcwd errno).
(, daemon (3)), (.. openlog (3) daemon), daemon stderr /dev/null