Pe usare le funzioni di errore salvi queste linee come errlib.h

codice:
/*

module: errlib.h

purpose: definitions of function sin errlib.c

reference: Stevens, Unix network programming (2ed), p.922

*/

#include <stdarg.h>

extern int daemon_proc;

void err_msg (const char *fmt, ...);

void err_quit (const char *fmt, ...);

void err_ret (const char *fmt, ...);

void err_sys (const char *fmt, ...);

void err_dump (const char *fmt, ...);
e queste linee come errlib.c

codice:
/*

module: errlib.c

purpose: library of error functions

reference: Stevens, Unix network programming (2ed), p.922

*/

#include <stdio.h>
#include <stdlib.h> // exit()
#include <stdarg.h>
#include <syslog.h>
#include <string.h>
#include <errno.h>

#define MAXLINE 4095

int daemon_proc = 0; /* set to 0 if stdout/stderr available, else set to 1 */

static void err_doit (int errnoflag, int level, const char *fmt, va_list ap)
{
  int errno_save = errno, n;
  char buf[MAXLINE+1];

  vsnprintf (buf, MAXLINE, fmt, ap);
  n = strlen(buf);
  if (errnoflag)
    snprintf (buf+n, MAXLINE-n, ": %s", strerror(errno_save));
  strcat (buf, "\n");

  if (daemon_proc)
    syslog (level, buf);
  else
  {
    fflush (stdout);
    fputs (buf, stderr);
    fflush (stderr);
  }
}

void err_ret (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  err_doit (1, LOG_INFO, fmt, ap);
  va_end (ap);
  return;
}

void err_sys (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  err_doit (1, LOG_ERR, fmt, ap);
  va_end (ap);
  exit (1);
}

void err_msg (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  err_doit (0, LOG_INFO, fmt, ap);
  va_end (ap);
  return;
}

void err_quit (const char *fmt, ...)
{
  va_list ap;

  va_start (ap, fmt);
  err_doit (0, LOG_ERR, fmt, ap);
  va_end (ap);
  exit (1);
}
ricordati di compilare il programma nella stessa cartella in cui si trovano questi due files.