⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signal.h

📁 ecos实时嵌入式操作系统
💻 H
字号:
#ifndef CYGONCE_SIGNAL_H#define CYGONCE_SIGNAL_H//=============================================================================////      signal.h////      POSIX signal header////=============================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     nickg, jlarmour// Contributors:  // Date:          2000-03-17// Purpose:       POSIX signal header// Description:   This header contains all the definitions needed to support//                the POSIX signal API under eCos.//              // Usage:         This file can either be included directly, or indirectly via//                the C library signal.h header.//              ////####DESCRIPTIONEND####////=============================================================================#include <pkgconf/hal.h>#include <pkgconf/kernel.h>#include <pkgconf/posix.h>#ifdef CYGPKG_POSIX_SIGNALS#include <stddef.h>             // NULL, size_t#include <limits.h>#include <sys/types.h>//-----------------------------------------------------------------------------// POSIX feature test macros// We do not support job control#undef _POSIX_JOB_CONTROL//-----------------------------------------------------------------------------// Manifest constants#ifdef _POSIX_REALTIME_SIGNALS// For now we define the topmost 8 signals as realtime#define SIGRTMIN                24#define SIGRTMAX                31#endif//-----------------------------------------------------------------------------// forward referencesstruct timespec;//-----------------------------------------------------------------------------// Sigval structureunion sigval{    int   sival_int;    // used when application-defined value is an int    void  *sival_ptr;   // used when application-defined value is a pointer};//-----------------------------------------------------------------------------// Siginfo structure passed to an SA_SIGINFO style handlertypedef struct{    int          si_signo;      // signal number    int          si_code;       // cause of signal    union sigval si_value;      // signal value} siginfo_t;// Values for si_code# define SI_USER	1# define SI_QUEUE	2# define SI_TIMER	3# define SI_ASYNCIO	4# define SI_MESGQ	5# define SI_EXCEPT      6       // signal is result of an exception delivery//-----------------------------------------------------------------------------// Basic types// Integral type that can be accessed atomically - from ISO C 7.7typedef cyg_atomic sig_atomic_t;// Type of signal handler functionstypedef void (*sa_sighandler_t)(int);// Type of signal handler used if SA_SIGINFO is set in sa_flagstypedef void (*sa_siginfoaction_t)(int signo, siginfo_t *info,                                  void *context);//-----------------------------------------------------------------------------//Signal handlers for use with signal() and sigaction(). We avoid 0//because in an embedded system this may be start of ROM and thus//a possible function pointer for reset.#define SIG_DFL ((sa_sighandler_t) 1)      // Default action#define SIG_IGN ((sa_sighandler_t) 2)      // Ignore action#define SIG_ERR ((sa_sighandler_t)-1)      // Error return//-----------------------------------------------------------------------------// Signal values#define SIGNULL   0    // Reserved signal - do not use (POSIX 3.3.1.1)#define SIGHUP    1    // Hangup on controlling terminal (POSIX)#define SIGINT    2    // Interactive attention (ISO C)#define SIGQUIT   3    // Interactive termination (POSIX)#define SIGILL    4    // Illegal instruction (not reset when caught) (ISO C)#define SIGTRAP   5    // Trace trap (not reset when caught)#define SIGIOT    6    // IOT instruction#define SIGABRT   6    // Abnormal termination - used by abort() (ISO C)#define SIGEMT    7    // EMT instruction#define SIGFPE    8    // Floating Point Exception e.g. div by 0 (ISO C)#define SIGKILL   9    // Kill (cannot be caught or ignored) (POSIX)#define SIGBUS    10   // Bus error (POSIX)#define SIGSEGV   11   // Invalid memory reference (ISO C)#define SIGSYS    12   // Bad argument to system call (used by anything?)#define SIGPIPE   13   // Write on a pipe with no one to read it (POSIX)#define SIGALRM   14   // Alarm timeout (POSIX)#define SIGTERM   15   // Software termination request (ISO C)#define SIGUSR1   16   // Application-defined signal 1 (POSIX)#define SIGUSR2   17   // Application-defined signal 2 (POSIX)//-----------------------------------------------------------------------------// Signal sets.// At present we define a single 32 bit integer mask. We may need, at// some future point, to extend this to 64 bits, or a structure// containing an array of masks.typedef cyg_uint32 sigset_t;//-----------------------------------------------------------------------------// struct sigaction describes the action to be taken when we get a signalstruct sigaction{    sigset_t               sa_mask;             // Additional signals to be blocked    int                    sa_flags;            // Special flags    union    {        sa_sighandler_t    sa_handler;          // signal handler        sa_siginfoaction_t sa_sigaction;        // Function to call instead of                                                // sa_handler if SA_SIGINFO is                                                // set in sa_flags    } sa_sigactionhandler;#define sa_handler   sa_sigactionhandler.sa_handler#define sa_sigaction sa_sigactionhandler.sa_sigaction};// sa_flag bits#define SA_NOCLDSTOP 1   // Don't generate SIGCHLD when children stop#define SA_SIGINFO   2   // Use the sa_siginfoaction_t style signal                         // handler, instead of the single argument handler//-----------------------------------------------------------------------------// Sigevent structure.struct sigevent{    int                  sigev_notify;    int                  sigev_signo;    union sigval         sigev_value;    void               (*sigev_notify_function) (union sigval);    pthread_attr_t      *sigev_notify_attributes;};# define SIGEV_NONE	1# define SIGEV_SIGNAL   2# define SIGEV_THREAD	3//-----------------------------------------------------------------------------// Functions to generate signals// Deliver sig to a process.// eCos only supports the value 0 for pid.externC int kill (pid_t pid, int sig);externC int pthread_kill (pthread_t thread, int sig);//-----------------------------------------------------------------------------// Functions to catch signals// Install signal handler for sig.externC int sigaction  (int sig, const struct sigaction *act,                        struct sigaction *oact);// Queue signal to process with value.externC int sigqueue  (pid_t pid, int sig, const union sigval value);//-----------------------------------------------------------------------------// Functions to deal with current blocked and pending masks// Set process blocked signal maskexternC int sigprocmask  (int how, const sigset_t *set, sigset_t *oset);// Set calling thread's blocked signal maskexternC int pthread_sigmask (int how, const sigset_t *set, sigset_t *oset);// Get set of pending signals for this processexternC int sigpending  (sigset_t *set);// Values for the how arguments:#define SIG_BLOCK       1#define SIG_UNBLOCK     2#define SIG_SETMASK     3//-----------------------------------------------------------------------------// Wait for or accept signals// Block signals in set and wait for a signalexternC int sigsuspend  (const sigset_t *set);// Wait for a signal in set to arriveexternC int sigwait  (const sigset_t *set, int *sig);// Do the same as sigwait() except return a siginfo_t object too.externC int sigwaitinfo  (const sigset_t *set, siginfo_t *info);// Do the same as sigwaitinfo() but return anyway after timeout.externC int sigtimedwait  (const sigset_t *set, siginfo_t *info,                           const struct timespec *timeout);//-----------------------------------------------------------------------------// Signal sets// Clear all signals from set.externC int sigemptyset  (sigset_t *set);// Set all signals in set.externC int sigfillset  (sigset_t *set);// Add signo to set.externC int sigaddset  (sigset_t *set, int signo);// Remove signo from set.externC int sigdelset  (sigset_t *set, int signo);// Test whether signo is in setexternC int sigismember  (const sigset_t *set, int signo);//-----------------------------------------------------------------------------// alarm, pause and sleep// Generate SIGALRM after some number of secondsexternC unsigned int alarm( unsigned int seconds );// Wait for a signal to be delivered.externC int pause( void );// Wait for a signal, or the given number of secondsexternC unsigned int sleep( unsigned int seconds );//-----------------------------------------------------------------------------// signal() - ISO C 7.7.1   ////// Installs a new signal handler for the specified signal, and returns// the old handler//externC sa_sighandler_t signal(int __sig, sa_sighandler_t __handler);// raise() - ISO C 7.7.2 ////// Raises the signal, which will cause the current signal handler for// that signal to be calledexternC int raise(int __sig);#endif // ifdef CYGPKG_POSIX_SIGNALS//-----------------------------------------------------------------------------#endif // ifndef CYGONCE_SIGNAL_H// End of signal.h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -