00001 /*!@file Util/csignals.H trivial wrapper for catching ANSI C signals */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005 // 00005 // by the University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: Rob Peters <rjpeters at usc dot edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Util/csignals.H $ 00035 // $Id: csignals.H 5685 2005-10-07 23:46:44Z rjpeters $ 00036 // 00037 00038 #ifndef UTIL_CSIGNALS_H_DEFINED 00039 #define UTIL_CSIGNALS_H_DEFINED 00040 00041 /// Install signal handlers to catch non-fatal signals 00042 /** @param dest Location where the number of a caught signal will be 00043 stored. This is marked as 'volatile' because it will be modified 00044 by signal handlers. Typically, applications will pass a pointer to 00045 a local int variable in to catchsignals(), and then check the 00046 value of that variable in each iteration through the main loop of 00047 the application, and taking steps to exit the application if the 00048 value becomes non-zero. 00049 00050 Note that catchsignals() only installs handlers for non-fatal 00051 signals (such as SIGHUP, SIGINT [control-c], SIGTERM [kill] and 00052 SIGALRM). The idea is that the user can interrupt an application 00053 that would otherwise be in an perpetual loop, but still give the 00054 application a chance to shut down cleanly (flushing open files, 00055 computing final stats, etc.). However, we don't trap more serious 00056 signals such as SIGQUIT, SIGABRT, SIGBUS, SIGFPE, SIGKILL, or 00057 SIGSEGV -- these usually represent a programming bug and/or the 00058 desire to generate a core dump, so catching the signal would avoid 00059 a core dump and hinder the ability to debug the context in which 00060 the signal was generated. 00061 */ 00062 void catchsignals(volatile int* dest) throw(); 00063 00064 /// Get a string name for a given signal number (e.g., "SIGINT", "SIGTERM") 00065 const char* signame(int signum) throw(); 00066 00067 // ###################################################################### 00068 /* So things look consistent in everyone's emacs... */ 00069 /* Local Variables: */ 00070 /* indent-tabs-mode: nil */ 00071 /* End: */ 00072 00073 #endif // UTIL_CSIGNALS_H_DEFINED