/* Listing 1. Registering an interrupt source */

/* fd_set variable required to use select() */
static fd_set set_of_pipes;

/* A structure to maintain a linked list of
   processes... */
struct list_proc{
  int p_num;
  void (*rout_hndl)();
  struct list_proc *next;
};

static struct list_proc *ini_list=NULL;

/* A list of processes will be created and
   maintained by the reg_process function,
   containing proceses information who are
   using interrupts */

void reg_process(int num_pipe, void (*routine)())
{
  struct list_proc *element;

  element = (struct list_proc *)
               malloc(sizeof(struct list_proc));
  element->p_num = num_pipe;
  element->rout_hndl = routine;
  element->next = ini_list;
  ini_list = element;

  /* Bring up to date file descriptors' group of
  the pipes conected to a process that is using
  signals */
  FD_SET(num_pipe, &set_of_pipes);
}
