Re: Siganl handler in CINT...

From: Masaharu Goto (gotom@hpyiddq.jpn.hp.com)
Date: Wed Mar 18 1998 - 01:17:10 MET


Radovan,

I try to answer your question.

In my understanding, you are asking for a way to deal with a signal
interrupt in an interpreted C/C++ code. You can do that as follows.

Cint supports ANSI C interrupt signals. You can use signal() and raise()
functions as follows.  For example, if you use SIGINT

interpreted.C------------------------------
#include <signal.h>
#include <stdio.h>

void gotsignal() { // Must be interpreted. Precompiled func can not be used
  printf("I got a signal\n");
  signal(SIGINT,gotsignal);
}

main() {
  signal(SIGINT,gotsignal); // interpreted signal() must get interpreted
			    // function as 2nd arg
  // something
  raise(SIGINT);    // interpreted raise works fine, gotsignal is called
  // do something
  my_raise(SIGINT); // compiled raise works fine, gotsignal is called
  // do something
  for(;;) {
    // do something
    // if raise(SIGINT) is called within this loop or somewhere, 
    // in the system gotsignal() is called. 
  }
}

compiled.C-----------------------------------
#include <signal.h>
void my_raise() {
  raise(SIGINT); // compiled raise
}

Limitation here is as follows,

 * If signal function is interpreted, you must give interpreted function
   as 2nd argument.
 * If signal function is compiled, you must give compiled function
   as 2nd argument.

raise function is compatible in both cases.

Cint , standalone, supports following type of signals.
   SIGINT
   SIGILL
   SIGFPE
   SIGABRT
   SIGSEGV
   SIGTERM

I'm not sure using above signal handler creates problem in other part of
ROOT system.

Masaharu Goto

> Hello ROOTers,
> 
>        in developing our system in ROOT we reach the point when we need
> to get data over network asynchronously. Whole the existing system is
> written using CINT macros & our version of ROOT interpreter with
> network extension allowing sending & receiving of data in compatible way
> with our existing applications. The question is if we can setup
> a signal handler in CINT macro and in the handler to receive data.
> Is there any way to do this ?
> 
> Radovan



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:31 MET